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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
js css 实现遮罩层覆盖其他页面元素附图
Sep 22 Javascript
学习JavaScript编程语言的8张思维导图分享
Mar 27 Javascript
JavaScript计算某一天是星期几的方法
Aug 05 Javascript
jQuery中inArray方法注意事项分析
Jan 25 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
Jul 11 Javascript
JQuery对ASP.NET MVC数据进行更新删除
Jul 13 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
详解vue.js 开发环境搭建最简单攻略
Jun 12 Javascript
JS打印彩色菱形的实例代码
Aug 15 Javascript
Vue实现跑马灯效果
May 25 Javascript
vue.js+element 默认提示中英文操作
Nov 11 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
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
JavaScript实现列出数组中最长的连续数
2014/12/29 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JavaScript面试中常考的字符串操作方法大全(包含ES6)
2020/05/10 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
Python的设计模式编程入门指南
2015/04/02 Python
python使用tornado实现登录和登出
2018/07/28 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python 求数组局部最大值的实例
2019/11/26 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
销售主管岗位职责
2014/02/08 职场文书
简单租房协议书
2014/10/21 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
原告离婚代理词
2015/05/23 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技
分享node.js实现简单登录注册的具体代码
2022/04/26 NodeJs