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无块作用域,影响了局部变量的作用范围,从而导致一些特别的情况。
不知道理解是否合理,请各位指教。
很多不合理的地方,这边的解析感觉更合理点我,12楼的回复
posted @ 2011-08-16 09:31  永无霾  阅读(266)  评论(0编辑  收藏  举报