javascript 作用域链生成顺序
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:editor 阅读 542
最近看到的,理清一些思路。javascript作用域链有时候会导致一些奇怪的问题,作为弱类型的javascript,函数也是对象,变量的作用域是函数体内有效,无块作用域。javascript在寻找变

  最近看到的,理清一些思路。

  javascript作用域链有时候会导致一些奇怪的问题,作为弱类型的javascript,函数也是对象,变量的作用域是函数体内有效,无块作用域。

  javascript在寻找变量或对象时,先从函数体内部上下文寻找,其次寻找函数的外部上下文。

  而javascript在构建作用域时,是词法作用域,并非执行时。参考abruzzi的例子:

  var str = "global";  function scopeTest(){    print(str);    var str = "local";    print(str);  }  scopeTest();  

结果为:

  undefined  local

解析器并没有调用javascript外部的str,在语法分析后,构造作用域,此时scopeTest()函数中的str在整个函数中初始化,并没有赋值,所以第一句执行print输出undefined

进行小修改,将scopeTest中的str定义为全局变量,所得结果就容易理解了。

  var str = "global";  function scopeTest(){    print(str);    str = "local";//str为全局变量。    print(str);  }  scopeTest();

此时结果是

  global  local  其实,就是全局变量和局部变量的作用域的作用关系,javascript无块作用域,影响了局部变量的作用范围,从而导致一些特别的情况。  不知道理解是否合理,请各位指教。  
联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2