web前端 js面向对象思想

来源:互联网 发布:微信公众号 java开源 编辑:程序博客网 时间:2024/04/30 01:32

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、将两个函数放在一个共同的函数中,使两个函数能够共享同一个作用域

原创粉丝点击