web前端 js面向对象思想
1、变量的作用域
var global = 1;
function f(){
var local = 2;
global++;
return global;
}
结果:f() ~ 2;f()~3;local~referenceError:local is not defined
解释://函数内的代码可以像访问自己的局部变量那样访问全局变量,反之,则不行
2、变量的提升
var a = 123;
function f(){
var a; //same as:var a = undefined
alert(a); //undefined
var a= 1;
alert(a);
}
解释:第一个alert()实际上显示的是undefined,这是因为函数域始终优先于全局域,所以局部变量a会覆盖掉所有与它同名的全局变量,尽管alert()第一次被调用时,a还没有被正式定义(即该值为undefined),但该变量本身已经存在本地空间了,这种特殊的现象叫做提升
3、函数名作为参数进行传递
var sum = function(a, b){
return a+b;
}
function a(){
return 1;
}
function b(){
return 1;
}
sum(a,b) //结果是2;
4、函数是特殊数的一种
var sum = function(a,b){
return a+b;
}
var add =sum
typeof add; //结果:function
5、回调函数
function multiplyByTwo(a,b,c,callback){
var i,ar = [];
for(i=0;i<3;i++){
ar[i]=callback[arguments[i]*2]
}
return ar;
}
multiplyByTwo(1,2,3,function(a){
return a+2;
}) //结果是[4,6,8]
6、即时函数
(
function(name){
alert("hello"+name+"!");
}
)("dude") //结果是hellodude
两种写法
(1)(function(){}());
(2)(function(){})();
7、内部私有函数
var outer = function(param){
var inner = function(theinput){
return theinput * 2
};
return "the result is"+ inner(param);
}
outer(2); 结果 the result is 4
outer(3),结果 the result is 16
使用确保私有性,有助于我们确保全局名字空间的纯净性
8、返回函数的函数
function a(){
alert("a!");
return function(){
alert("b!")
}
}
a() //结果a!,
function () {
alert("b!")
}
a()() //结果是a!,b!
9、闭包就是指的是函数的变量的作用域
(1)、作用域链
var a= 1;
function f(){
var b =1;
return a;
}
最后3个我也不是很会,还在研究,自学吧~
10、利用闭包突破作用域链
11、循环中的闭包(分为两种)
12、将两个函数放在一个共同的函数中,使两个函数能够共享同一个作用域