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 相关文章推荐
js传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
父节点获取子节点的字符串示例代码
Feb 26 Javascript
jquery ui resize 中border-box的bug修正
Apr 26 Javascript
通过jquery实现页面的动画效果(实例代码)
Sep 18 Javascript
AngularJs验证重复密码的方法(两种)
Nov 25 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
Dec 02 Javascript
ES5学习教程之Array对象
Apr 01 Javascript
three.js加载obj模型的实例代码
Nov 10 Javascript
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
在vant 中使用cell组件 定义图标该图片和位置操作
Nov 02 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
再谈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
PHP制作万年历
2015/01/07 PHP
php生成图片缩略图的方法
2015/04/07 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
js 操作select相关方法函数
2009/12/06 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
wxpython 学习笔记 第一天
2009/03/16 Python
编程语言Python的发展史
2014/09/26 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python3.4学习笔记之列表、数组操作示例
2019/03/01 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
python中使用np.delete()的实例方法
2021/02/01 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
木马的传播途径主要有哪些
2016/04/08 面试题
元旦晚会邀请函
2014/01/27 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书