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 遍历对象中的子对象
Jul 03 Javascript
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
微信小程序 require机制详解及实例代码
Dec 14 Javascript
令按钮悬浮在(手机)页面底部的实现方法
May 02 Javascript
JavaScript事件方法(实例讲解)
Jun 27 Javascript
JS库之ParticlesJS使用简介
Sep 12 Javascript
详解React 的几种条件渲染以及选择
Oct 23 Javascript
Vue的编码技巧与规范使用详解
Aug 28 Javascript
Layui table field初始化加载时进行隐藏的方法
Sep 19 Javascript
Vue——前端生成二维码的示例
Dec 19 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 日期加减的类,很不错
2009/10/10 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
AngularJS语法详解
2015/01/23 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
微信小程序 rpx 尺寸单位详细介绍
2016/10/13 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
vue中实现在外部调用methods的方法(推荐)
2018/02/08 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
js实现聊天对话框
2020/02/08 Javascript
Python制作CSDN免积分下载器
2015/03/10 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
python中uuid模块实例浅析
2020/12/29 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
清洁工表扬信
2014/01/08 职场文书
满月酒主持词
2014/03/27 职场文书
企业精神口号
2014/06/11 职场文书
放射科岗位职责
2015/02/14 职场文书
导游词之无锡梅园
2019/11/28 职场文书