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 相关文章推荐
ajax的hide隐藏问题解决方法
Dec 11 Javascript
Script标签与访问HTML页面详解
Jan 10 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
Aug 27 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
Oct 30 Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
Aug 22 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
js中document.write和document.writeln的区别
Mar 11 Javascript
Angular5中状态管理的实现
Sep 03 Javascript
mocha的时序规则讲解
Feb 16 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 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
5.PHP的其他功能
2006/10/09 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
php实现的RSS生成类实例
2015/04/23 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
网页禁用右键菜单和鼠标拖动选择方法小结
2015/02/25 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
JavaScript——DOM操作——Window.document对象详解
2016/07/14 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
解决vue-router中的query动态传参问题
2018/03/20 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
python if not in 多条件判断代码
2016/09/21 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Tensorflow累加的实现案例
2020/02/05 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
移交协议书
2014/08/19 职场文书
会计工作岗位职责
2015/02/03 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
政府会议通知范文
2015/04/15 职场文书
毕业设计工作总结
2015/08/14 职场文书
高一化学教学反思
2016/02/22 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP