JavaScript变量提升
来源:互联网 发布:淘宝买ps3是新机吗 编辑:程序博客网 时间:2024/06/11 23:29
先来看一段代码,尝试写出答案。
<script>var v1 = '这是全局变量v1'; var f1 = function(){ var d=v1; console.log(d); console.log(v1); var v1 = '这是局部变量v1'; };var v2 = '这是全局变量v2'; var f2 = function(){ console.log(v2); };var v3 = '这是全局变量v3'; var f3 = function(){ var d=v3; var v3='这是局部变量v3'; var dd=v3; console.log(d); console.log(v3); console.log(dd); };var v4 = '这是全局变量v4'; var f4 = function(){ var d=v4; console.log(d); };</script>
f2和f4 的答案都不难得出
即分别输出window对象下的全局变量 v2和v4
原因就是函数f2和f4在建立自身的词法环境时,会先从函数体本身寻找变量,当自身找不到时,则继续遍历作用域链的上级词法环境,直到找到或者寻找对象为null为止。
而f1则输出 两个 undefined
这就涉及到了变量提升的问题了
当一个函数被建立且载入运行环境时,它会建立一个自身词法环境,该环境会预先声明自身函数体内的所以变量和函数
但在f1中变量v1的调用先于声明,故在建立词法环境时,js引擎将v1提前到调用前声明,但仅仅只是声明,并没有赋值,即v1=undefined
变量提升后的f1为:
var v1 = '这是全局变量v1'; var f1 = function(){ var v1 = undefined; var d=v1; console.log(d); console.log(v1); };
f3同理,加了个dd做对比,应该更易于理解。
0 0
- javascript变量声明提升
- javascript 变量/函数 提升
- javascript变量声明提升
- JavaScript变量提升示例
- JavaScript变量提升-Hoisting
- JavaScript变量声明提升
- Javascript变量提升解释
- JavaScript 变量声明提升
- Javascript变量提升(Hoisting)
- javascript变量声明提升
- JavaScript之变量提升
- javaScript的变量提升
- javascript之变量提升
- Javascript变量提升(Hoisting)
- JavaScript 变量提升
- Javascript 变量提升
- JavaScript--变量提升
- javaScript变量提升?
- 碎片知识点-01
- 一些linux的实用小知识
- AngularJS的常见指令,来看看你知道几个嘞
- Find Mode in Binary Search Tree
- 线性表篇之顺序表
- JavaScript变量提升
- JavaScript学习笔记
- vim 常用命令
- clippingNode 新手引导
- Centos 6.8升级内核到3.10 安装Docker
- hdu5974——A Simple Math Problem(gcd推导+数学+解方程组)
- 我的java学习路之类和对象学习应用demo2日历
- 垃圾内存回收算法
- EmWin中Edit工具实时更新数据方法