js变量作用域问题
2015-06-02 16:49
537 查看
工作面试中我们经常会遇到这样的题目:
正确的运行结果是:undefined,world
为什么是这个结果呢?
首先我们要明确几点:
js作用域最外界的是window作用域,同时,js是以函数为块作用域的,每一个函数都是一个快作用域
js预编译阶段,作用域内通过 var 定义的变量都会被提到作用域最前面,并赋值undefined
js中存在作用域链,运行时都会在当前的作用域内寻找变量的定义,如果当前作用域没有该变量的定义,则到该作用域的上一级作用域去查找该变量,这样一级一级查找,直至window作用域结束,最终如果没有找到则报错。
上面的题目,在经过js预编译之后,会变成如下:
**所以,当第一次alert时,在函数b作用域内去找变量a的var定义,值为undefined;
当第二次alert时,b作用域内的变量a被赋值world,所以值为world**
var a = "Hello"; function b() { alert(a); var a = "World"; alert(a); } b();
正确的运行结果是:undefined,world
为什么是这个结果呢?
首先我们要明确几点:
js作用域最外界的是window作用域,同时,js是以函数为块作用域的,每一个函数都是一个快作用域
js预编译阶段,作用域内通过 var 定义的变量都会被提到作用域最前面,并赋值undefined
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**
相关文章推荐
- javascript闭包的学习
- javascript 控制 table tr display block 显示模式时,只对第一个单元格有效
- 201506021641_《JavaScript权威指南》(p25-38)
- 记录立邦商城母亲节浇花js效果
- JS仿淘宝星星评价
- IDF实验室-简单的js解密
- js事件委托
- C 语言 json 库的基本用法
- 【JavaScript 3—基础知识点】:运算符
- 【JavaScript 3—基础知识点】:运算符
- (转)JS window对象的top、parent、opener含义
- JavaScript获取当前根目录
- javascript javascript面向对象的理解及简单的示例
- JS 立即执行的函数表达式(function)写法
- js 去掉input标签中的百分号【%】
- Wait A Moment, JavaScript Does Support Multiple Inheritance!
- js 数组对象的操作方法
- js判断undefined类型
- js date扩展方法
- js 获得多个同name 的input输入框的值