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 相关文章推荐
jQuery ui 1.7更新小结
Aug 15 Javascript
div移动 输入框不能输入的问题
Nov 19 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
Sep 16 Javascript
js绑定事件和解绑事件
Apr 27 Javascript
JavaScript实现树的遍历算法示例【广度优先与深度优先】
Oct 26 Javascript
浅谈Angular 中何时取消订阅
Nov 22 Javascript
结合Vue控制字符和字节的显示个数的示例
May 17 Javascript
微信小程序实现判断是分享到群还是个人功能示例
May 03 Javascript
小程序如何写动态标签的实现方法
Feb 05 Javascript
5个你不知道的JavaScript字符串处理库(小结)
Jun 01 Javascript
在vue中实现禁止屏幕滚动,禁止屏幕滑动
Jul 22 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
laravel 中如何使用ajax和vue总结
2017/08/16 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
Node.js学习之内置模块fs用法示例
2020/01/22 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
python操作日期和时间的方法
2014/03/11 Python
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Python金融数据可视化汇总
2017/11/17 Python
利用python求积分的实例
2019/07/03 Python
全面了解django的缓存机制及使用方法
2019/07/22 Python
Python3 无重复字符的最长子串的实现
2019/10/08 Python
Python有参函数使用代码实例
2020/01/06 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
培训楼经理岗位责任制
2014/02/10 职场文书
电视节目策划方案
2014/05/16 职场文书
2014年教师德育工作总结
2014/11/10 职场文书
2014财务年度工作总结
2014/11/11 职场文书
刘公岛导游词
2015/02/05 职场文书
民事上诉状范文
2015/05/22 职场文书
银行工作心得体会范文
2016/01/23 职场文书