码迷,mamicode.com
首页 > Web开发 > 详细

js变量作用域问题

时间:2015-06-02 17:56:39      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:前端开发   变量作用域   

工作面试中我们经常会遇到这样的题目:

var a = "Hello";
function b() {
    alert(a);
    var a = "World";
    alert(a);
}
b();

正确的运行结果是:undefined,world

为什么是这个结果呢?

首先我们要明确几点:

  1. js作用域最外界的是window作用域,同时,js是以函数为块作用域的,每一个函数都是一个快作用域
  2. js预编译阶段,作用域内通过 var 定义的变量都会被提到作用域最前面,并赋值undefined
  3. js中存在作用域链,运行时都会在当前的作用域内寻找变量的定义,如果当前作用域没有该变量的定义,则到该作用域的上一级作用域去查找该变量,这样一级一级查找,直至window作用域结束,最终如果没有找到则报错。

上面的题目,在经过js预编译之后,会变成如下:

var a=undefined;
a = "Hello";
function b() {
    var a=undefined;
    alert(a);
    a = "World";
    alert(a);
}
b();

**所以,当第一次alert时,在函数b作用域内去找变量a的var定义,值为undefined;
当第二次alert时,b作用域内的变量a被赋值world,所以值为world**

js变量作用域问题

标签:前端开发   变量作用域   

原文地址:http://blog.csdn.net/u012193330/article/details/46332083

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!