js变量提升深入理解


Posted in Javascript onSeptember 16, 2016

JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部:

'use strict';

function foo() {
  var x = 'Hello, ' + y;
  alert(x);
  var y = 'Bob';
}
foo();

虽然是strict模式,但语句var x = 'Hello, ' + y;并不报错,原因是变量y在稍后申明了。但是alert显示Hello, undefined,说明变量y的值为undefined。这正是因为JavaScript引擎自动提升了变量y的声明,但不会提升变量y的赋值。

对于上述foo()函数,JavaScript引擎看到的代码相当于:

function foo() {
  var y; // 提升变量y的申明
  var x = 'Hello, ' + y;
  alert(x);
  y = 'Bob';
}

由于JavaScript的这一怪异的“特性”,我们在函数内部定义变量时,请严格遵守“在函数内部首先申明所有变量”这一规则。最常见的做法是用一个var申明函数内部用到的所有变量:

function foo() {
  var
    x = 1, // x初始化为1
    y = x + 1, // y初始化为2
    z, i; // z和i为undefined
  // 其他语句:
  for (i=0; i<100; i++) {
    ...
  }
}

以上这篇js变量提升深入理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 Javascript
表头固定(利用jquery实现原理介绍)
Nov 08 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 Javascript
JS按字节截取字符长度实例
Nov 20 Javascript
JavaScript编写连连看小游戏
Jul 07 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
关于微信中a链接无法跳转问题
Aug 02 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
Aug 09 Javascript
JavaScript仿网易选项卡制作代码
Oct 06 Javascript
JS 实现banner图片轮播效果(鼠标事件)
Aug 04 Javascript
vue登录注册实例详解
Sep 14 Javascript
vuex中store存储store.commit和store.dispatch的用法
Jul 24 Javascript
再谈javascript常见错误及解决方法
Sep 16 #Javascript
使用JQuery中的trim()方法去掉前后空格
Sep 16 #Javascript
浅谈jQuery效果函数
Sep 16 #Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
Sep 16 #Javascript
jQuery实现的右下角广告窗体跟随效果示例
Sep 16 #Javascript
jQuery实现磁力图片跟随效果完整示例
Sep 16 #Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
Sep 16 #Javascript
You might like
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
php继承的一个应用
2011/09/06 PHP
探讨PHP中OO之静态关键字以及类常量的详解
2013/06/07 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
php删除二维数组中的重复值方法
2018/03/12 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
深入理解python多进程编程
2016/06/12 Python
python字符串查找函数的用法详解
2019/07/08 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
业务助理岗位职责
2013/11/18 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
庆祝教师节活动方案
2014/01/31 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
合作协议书范本
2014/04/17 职场文书
公司运动会策划方案
2014/05/25 职场文书
导游词范文
2015/02/13 职场文书
开票证明
2015/06/23 职场文书
文艺节目主持词
2015/07/06 职场文书
python xlwt模块的使用解析
2021/04/13 Python
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android