日期:2014-05-16  浏览次数:20336 次

js的词法作用域
var i=10;
function a() {
  alert(i);
  var i = 2;
  alert(i);
};
a(); 

为什么第一个alert(i)输出的值是undefined?还有词法作用域,不是很理解

------解决方案--------------------
var i=10;
function a() {
alert(i); //1
var i = 2; //2
alert(i); //3
};
a();
 1、为什么第一个alert(i)输出的值是undefined?
答:因为在function a(){}内部有var str的声明, var的声明是在整个函数可见的,也就是说在执行1时,程序已经知道了在a()内部有str被声明了,但是还没有给赋值所以alert的结果就是undefined。

2、什么是词法作用域?
答:所谓词法作用域是说,其作用域为在定义时(词法分析时)就确定下来的,而并非在执行时确定。白话就是在函数未执行前,函数执行的顺序已经被确定,而不是类似JAVA一样,是在执行前根本不知道执行顺序。

希望对你有帮助!!