注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易邮箱前端技术中心

汇聚最新最劲爆的前端技术

 
 
 

日志

 
 
 
 

[每周爆栈精选]javascript关于作用域的几个例子  

2013-10-19 15:44:39|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
出处:http://stackoverflow.com/questions/500431/javascript-variable-scope
// 全局作用域变量定义
var a=1;

// 简单的例子:访问全局作用域
function one(){
    alert(a); 
}

// 简单的例子:访问的是局部作用域
function two(a){
    alert(a);
}

// 简单的例子:还是局部作用域
function three(){
  var a = 3;
  alert(a);
}

// 有点难度的例子:在函数内脚本块里面定义的局部变量,可以被函数内部访问的局部作用域的变量
function four(){
    if(true){
        var a=4;
    }

    alert(a); // alerts '4', not the global value of '1'
}


// 有点难度的例子:对象属性作用域
function Five(){
    this.a = 5;
}


// 高级货: 闭包
var six = function(){
    var foo = 6;

    return function(){
        // javascript "闭包" 意思是我只能在这个函数里面访问到foo, 
        alert(foo);
    }
}()


// 另外一个高级货: 基于prototype的作用域
function Seven(){
  this.a = 7;
}

// [object].prototype.property 方式定义属性会在 [object].property 方式定义后丢失对应的属性
Seven.prototype.a = -1; // 此值会被覆盖,因为构造函数会将a属性重新复制
Seven.prototype.b = 8; // 同理此b属性没有被覆盖,所以值为8



// 以上例子的值分别为 1-8
one();
two(2);
three();
four();
alert(new Five().a);
six();
alert(new Seven().a);
alert(new Seven().b);
自己补充几个高级货:

// this作用域的区别
var nine = 9;
function Nine(){
alert(this.nine); // this指向window的全局作用域
}
Nine();
// 以上的直接调用Nine()的效果,但是this对象作用域可以变的
Nine.call({nine : 10});// this对象指向参数的对象

// 除了call和apply,还有另外一种方式调用会导致不同的this引用对象
var Eleven = 12;
var bar = {
Eleven : 11,
foo : function(){
alert(this.Eleven)
}
};
bar.foo();// this指向bar对象
var foo = bar.foo;
foo();// this指向window
// 以上例子分别输出9-12


Harry

  评论这张
 
阅读(909)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017