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对象和属性的创建方法
Jan 15 Javascript
关于图片验证码设计的思考
Jan 29 Javascript
类似CSDN图片切换效果脚本
Sep 17 Javascript
jQuery实现异步获取json数据的2种方式
Aug 29 Javascript
在JavaScript中使用NaN值的方法
Jun 05 Javascript
javascript实现全角转半角的方法
Jan 23 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
浅谈Web页面向后台提交数据的方式和选择
Sep 23 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
CSS3 动画卡顿性能优化的完美解决方案
Sep 20 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 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
10个简化PHP开发的工具
2014/12/25 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
createElement与createDocumentFragment的点点区别小结
2011/12/19 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
vuex的使用步骤
2021/01/06 Vue.js
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
跟老齐学Python之永远强大的函数
2014/09/14 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
Python中的相关分析correlation analysis的实现
2019/08/29 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
AmazeUI 等分网格的实现示例
2020/08/25 HTML / CSS
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
护理专科毕业自荐信范文
2014/04/21 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
幼儿园小班家长评语
2014/12/30 职场文书
爱护公物主题班会
2015/08/17 职场文书
浅析JavaScript中的变量提升
2022/06/01 Javascript
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技