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中常见陷阱小结
Apr 27 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
Nov 19 Javascript
js 左右悬浮对联广告特效代码
Dec 12 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
Jul 07 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
Bootstrap导航中表单简单实现代码
Mar 06 Javascript
React服务端渲染(总结)
Jul 01 Javascript
10行代码实现微信小程序滑动tab切换
Dec 28 Javascript
JavaScript类型相关的常用操作总结
Feb 14 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
Apr 22 Javascript
vue总线机制(bus)知识点详解
May 10 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提交表单发送邮件的方法
2015/03/20 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
JS模拟实现方法重载示例
2016/08/03 Javascript
web 前端常用组件之Layer弹出层组件
2016/09/22 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
微信小程序自定义组件的实现方法及自定义组件与页面间的数据传递问题
2018/10/09 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
python遍历数组的方法小结
2015/04/30 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
Python运维开发之psutil库的使用详解
2018/10/18 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Django框架反向解析操作详解
2019/11/28 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
如何利用python 读取配置文件
2021/01/06 Python
彪马英国官网:PUMA英国
2019/02/11 全球购物
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
奖学金自我鉴定范文
2013/10/03 职场文书
求职信范文大全
2014/05/26 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技