它不会对本身属于URI的特殊字符进行编码,定义函数有两种方式

 区块链     |      2020-01-04 04:35

一、函数声明和函数表达式

定义函数有两种方式:函数声明和函数表达式。它们之间一个重要的区别是函数提升。

1.函数声明会进行函数提升,所以函数调用在函数声明之前也不会报错:

test();
function test(){
alert(1);
}

2.函数表达式不会进行函数提升,函数调用在函数声明之前的话会报错:

test(); // test is not a function
var test=function(){
alert(1);
}

一、Global

所有在全局作用域定义的属性和方法,都属于Global对象。

1.URI编码:

encodeURI():主要用于对整个URI编码。它不会对本身属于URI的特殊字符进行编码。

encodeComponentURI():主要用于对URI中的某一部分进行编码,很常用的是对查询字符串参数进行编码。它会对所有非标准字符进行编码。

对应的解码方法是decodeURI()和decodeURIComponent。

var uri='http://www.cnblogs.com?a=1 2&b=陈&c=123';
var a=encodeURI(uri);// http://www.cnblogs.com?a=1%202&b=%E9%99%88&c=123
var b=encodeURIComponent(uri);// http%3A%2F%2Fwww.cnblogs.com%3Fa%3D1%202%26b%3D%E9%99%88%26c%3D123
decodeURI(a);//√"http://www.cnblogs.com?a=1 2&b=陈&c=123"
decodeURI(b);//×"http%3A%2F%2Fwww.cnblogs.com%3Fa%3D1 2%26b%3D陈%26c%3D123"
decodeURIComponent(a);//√"http://www.cnblogs.com?a=1 2&b=陈&c=123"
decodeURIComponent(b);//√http://www.cnblogs.com?a=1 2&b=陈&c=123

2.eval()方法

当调用eval()方法时,会执行参数中传入的语句,并把执行结果插入到原位置。

该方法执行的代码与当前调用环境具有相同的作用域链。

var a=1;
eval('function test(){alert(a);}');
test();//结果1

3.在web浏览器中,全局作用域的变量和方法都会成为window对象的属性。

var name='jing';
function sayName(){
console.log(name);
}
window.sayName(window.name);//jing

1

二、递归函数

递归函数是通过在函数内部调用自身实现的。

①直接使用函数名进行递归调用

function f(num){
  if(num==1){
  return 1;
  }else{
  return num*f(num-1);
  }
}
console.log(f(4));//24
console.log(f(5));//120

这种实现的缺点是,在函数内部直接写死了函数名称。如果进行如下设置就会报错:

var test=f;
f=null;
console.log(test(3));//报错, f is not a function

②通过arguments.callee解决,arguments.callee是一个指向正在执行的函数的指针。这样就避免了上述问题。

function f(num){
  if(num==1){
  return 1;
  }else{
  return num*arguments.callee(num-1);
  }
}
console.log(f(4));//24
console.log(f(5));//120
var test=f;
f=null;
console.log(test(3));//6

不过这种方式还有一个缺点,就是在严格模式下会执行失败。

添加"use strict"后执行会报错:

'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them

③采用命名函数表达式可以在严格模式下成功。

"use strict";
var f=function t(num){
if(num==1){
  return 1;
  }else{
  return num*t(num-1);
  }
}
console.log(f(4));//24
console.log(f(5));//120
var test=f;
f=null;
console.log(test(3));//6

二、Math对象

Math对象包含了很多数据计算的属性和方法。常用的几个:

1.Math.min()和Math.max:计算一组数值中的最大值和最小值,参数可以任意多个数值。

Math.min(3,5,10,88,3);//
Math.max(3,5,10,88,3)//88

当计算一个数组中的最大最小值时,可以这样调用:

var result=[3,5,10,88,3];
Math.min(result);//错误,NaN
Math.min.apply(Math,result);//3

2.舍入方法

Math.ceil():向上取整;

Math.floor():向下取整;

Math.round():四舍五入取整。

var data=5.6;
Math.ceil(data);//6
Math.floor(data);//5
Math.round(data);//6
Math.round(5.4)//5

3.随机数random ()

Math.random()返回一个介于0和1之间的随机数,不包含0和1。

取一个整数范围内的随机数可以这样来计算:

result=(Math.random()*可能取值的总数+第一个可能的值)

2018年加入了一个新社团——007。约定一群人一起,7天写一篇文章,连续写7年,7年后一起去南极。用身体力行来践行自我的价值,用每一天的学习来积聚能量。

三、闭包

闭包是有权访问另一个函数作用域内变量的函数。创建闭包的常见方式就是在一个函数内创建另外一个函数。在另一个函数内部定义的函数,会把外部函数的作用域添加到其作用域链中。

1.闭包与变量

①闭包只能取得包含函数中任意变量的最后一个值。例如:

function createFunctions(){
  var result=new Array();
  for(var i=0;i<10;i++){
    result[i]=function(){
    return i;
    }
  }
  return result;
}
var result=createFunctions();
result[1]();//10

这个方法调用传入1-10返回结果都是10,这并不符合预期。

②通过匿名函数进行改造:

function createFunctions(){
  var result=new Array();
  for(var i=0;i<10;i++){
    result[i]=(function(num){
    return num;
    })(i);
  }
  return result;
}
var result=createFunctions();
result[2];//2

改造后的运行结果符合我们的预期了。因为将i传递给num命名参数时是按值传递的。

2.闭包中的this

this变量是在运行时基于函数的执行环境绑定的。

在全局执行环境中,this指向window对象;

当函数作为某个对象的方法时,this等于那个对象;

匿名函数的执行具有全局性,this通常指向window对象。

①闭包中this实例:

var name='window';
var object={
  name:"object",
  getName:function(){
    return function(){
        return this.name;
    }
} 
};
object.getName()();//window

②先将闭包外部作用域中的this保存到一个闭包能访问到的变量中,这样就可以让闭包访问相应的对象了。例如:

var name='window';
var object={
  name:"object",
  getName:function(){
var that=this;
     return function(){      
        return that.name;
    }
} 
};
object.getName()();//object

三、String类型

1.字符方法

charAt(n):直接返回字符串中指定位置的字符;

charCodeAt(n):返回指定位置字符的字符编码。

var s="Javascript高级程序设计";
console.log(s.charAt(10));//高
console.log(s.charCodeAt(10));//39640

2.取子串

slice():第一个参数是子串开始位置索引,第二个参数是子串结束位置索引(不包括结束字符).

substring():第一个参数是子串开始位置索引,第二个参数是子串结束位置索引(不包括结束字符).

substr():第一个参数是子串开始位置索引,第二个参数是子串长度.

var s="提醒一下七夕节快到了";
console.log(s.slice(4,7));
console.log(s.substring(4,7));
console.log(s.substr(4,3));

3.字符串模式匹配

search(reg):返回字符串中第一个匹配项的索引,如果匹配不到就返回-1。方法有一个参数,可以是正则表达式或者RegExp对象。

match(reg):该方法有一个参数,可以是正则表达式或者RegExp对象。

replace():替换子串。如果想替换所有匹配的子串,那么只能用正则表达式。

var s='http://www.cnblogs.com/1/1/'
var r=/d+/g;
s.search(r);//23
s.match(r);//["1","1"]

//只替换第一个匹配项
s.replace('1','janes')//"http://www.cnblogs.com/janes/1/"

//替换所有匹配项
s.replace(r,'janes');//"http://www.cnblogs.com/janes/"

昨天在跟大熊讨论一个话题:“酒香不怕巷子深”,这个道理还是不适不适用于现在和未来?

这句话的出处,传言是在明清时代,泸州老窖的发源地有一条很深很长的巷子,沿途都是酒坊,但酒巷尽头那家作坊因为窖池建的最早,酿造技术最好,在当时最为有名。人们为了喝上好酒,都要穿过长长的巷子去到最里面那一家去买。

那个时代大家都信奉工匠精神,只要有手艺有传承,只要酒香再深的巷子,也不担心得不到市场的认可。

而随着信息时代的到来,丰富的讯息充斥在每个人的世界里,尤其在供大于求的市场经济下,酒香也怕巷子深的论调得到了很多人的认同,大家普遍认为酒香还得靠吆喝,只有充分的市场曝光和广告营销,这样才能受人瞩目,才能有销售。于是在交易市场里,大家都较劲着谁的广告投入多、谁的口号更响亮、谁的代言人更大牌,而那些靠手艺吃饭的老店逐渐没落,徘徊在靠着老客维系生计的边缘。

2

2017年在大众眼中出现了一个新词“区块链”。在维基百科的定义,区块链(英语:blockchain 或 block chain)是用分布式数据库识别、传播和记载信息的智能化对等网络, 也称为价值互联网。

这里有个词“价值”值得特别重视,在区块链出现的将来,社会会更加透明公正公开,市场这个概念可能会被淡化,价值的交换会变得更直接更便捷。

澳门24小时娱乐线路检测,区块链技术强调的就是去中心化,建立对等网络,用开源软件把密码学原理、时序数据和共识机制相结合,替代目前的市场机制,来保障分布式数据库中各节点的连贯和持续,使信息能即时验证、可追溯、但难以篡改和无法屏蔽,从而创造了一套隐私、高效、安全的共享价值体系。

单是想象一下就非常兴奋,目前区块链技术在国家货币、社区货币、各种私有链项目、ICO众筹、非营利组织、以及去中心化的社会网络得到的应用,已彰显出巨大的价值,比特币一路攀升的价格正是区块链无限能量的一丝体现。

上一篇:没有了 下一篇:没有了