您的位置:首页 > Web前端 > JavaScript

极客学院之javascript高级技巧

2016-06-04 00:12 381 查看
1、变量作用域和闭包

function test(){                          

if(false){

  var i=10}

else{

var t=100;

}

alert(t);}

test();

//js是函数级别的作用域,在内部的变量,内部都能访问,外部不能访问内部的,内部能访问外部的

var j=100;

~(function test(){

 console.log(j);})();

//波浪线才能有意义,是把~后的一块变成一个表达式然后输出

var j=100;

function test(){

var j;

alert(j);

j=10;}

test();

结果:undefine,,因为内部的var j;把外部的var j=1001给干掉了,内部的j=10;还没赋值就已经输出了

 闭包:

function test(){

var k=1000;

return function(){

return k;

}

}

var t=test()();

alert(t);

//闭包:就是拿到本不该属于自己的东西

2、this指针的使用:谁调用它,this就指谁

this.m=1000;

var obj={

m:100;

test:function(){

alert(this.m);

}

}

obj.test();

结果:100;因为调用了obj的this。

加入闭包特殊情况

this.m=1000;

var obj={

m:100;

test:function(){

alert(this.m);

}

return function(){

alert(this.m);

}

}

(obj.test())();  或者      var t=obj.test();       window.t();s

结果:先弹出100,后弹出1000;因为采用了闭包方法return:它把this抛出到外面window处了,所以获取的是外面的this.m=1000;

this.a=1000;

function test(){

this.a=1;

}

test.prototype.geta=function(){

return this;

};

var p=new test;

console.log(p.geta());

//prototype 属性使您有能力向对象添加属性和方法

结果:p是test()new出来的,p.geta()=1;因为调用了geta的this,通过prototype给原形test的this添加了方法,this又是test()中this.a=1。 

3、按值传递和按引用传递

function test(num){

 num=num+1;

return num;

}

var num=1;

alert(test(num));

结果:2

//按值传递

function test(num){

//这里对num这个变量创建了一个内存的副本

var num=num+1;

return num;

}

var num=1;//此时num为number

alert(test(num);

alert(num);

结果:首先弹出2 ,然后弹出1

//按引用传递

function test(obj){

//当前的Obj对内存的这个地址指向同一个

obj.age='20';

console.log("inner","obj");

}

var obj={                //此时Obj为对象

name:"xiaoming";

}

test(obj);

console.log('outer',obj);

结果:inner Object{name:"xiaoming",age:"20"}

            outer Object{name:xiaoming",age:"20"}

//引用类型:js对象,object,array

//值类型:string ,number,boolean
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: