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一些不错的函数脚本代码
Sep 10 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
Dec 29 Javascript
javascript中innerText和innerHTML属性用法实例分析
May 13 Javascript
删除javascript所创建子节点的方法
May 21 Javascript
使用vue.js开发时一些注意事项
Apr 27 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
Bootstrap3 模态框使用实例
Feb 22 Javascript
使用bootstrap插件实现模态框效果
May 10 Javascript
React路由管理之React Router总结
May 10 Javascript
jquery.pager.js分页实现详解
Jul 29 jQuery
解决Vue打包上线之后部分CSS不生效的问题
Nov 12 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php生成html文件方法总结
2014/12/01 PHP
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
小程序scroll-view安卓机隐藏横向滚动条的实现详解
2019/05/16 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python多进程写入同一文件的方法
2019/01/14 Python
Django实现单用户登录的方法示例
2019/03/28 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
Python实现某论坛自动签到功能
2019/08/20 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
python已协程方式处理任务实现过程
2019/12/27 Python
什么是python的函数体
2020/06/19 Python
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
数学系个人求职信范文
2014/01/30 职场文书
小学敬老月活动方案
2014/02/11 职场文书
校庆标语集锦
2014/06/25 职场文书
2016年教师节慰问信
2015/12/01 职场文书
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python
linux目录管理方法介绍
2022/06/01 Servers