美文网首页
变量提升所导致的问题

变量提升所导致的问题

作者: fighterboy | 来源:发表于2017-05-24 15:55 被阅读0次

var  tmp=new Date();

function    f(){

console.log(tmp);

if(false){

var tmp='hello world';

}

}

f();// undefined

上面代码的原意是,if代码块的外部使用外层的tmp变量,内部使用内层的tmp变量。但是,函数f执行后,输出结果为undefined,原因在于变量提升,导致内层的tmp变量覆盖了外层的tmp变量。

es6代码

let  tmp = new Date();

function  f(){

console.log(tmp);

if(false){

tmp='hello world';

console.log(tmp);

}

}

f();// Wed May 24 2017 15:45:57 GMT+0800 (中国标准时间)


场景2:

var s = 'hello';

for (var i = 0; i < s.length; i++) {

console.log(s[i]);

}

console.log(i);//5

上面代码中,变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。(可以把 var i 改为  let i 试一下)

es6代码

var s = 'hello';

for (let i = 0; i < s.length; i++) {

console.log(s[i]);

}

console.log(typeof i); // typeof 会抛出异常    => undefined

相关文章

  • 变量提升所导致的问题

    var tmp=new Date();function f(){console.log(tmp);if(false...

  • ES6基础1-2(手写深拷贝、Vue数据劫持、Object.de

    1.var都要改为let和const var声明的变量 (污染全局变量) 使用var导致变量提升的问题 var可以...

  • [ES6] 块级绑定

    使用var声明变量 全局变量挂载到全局对象:全局对象成员污染问题 允许重复的变量声明:导致数据被覆盖 变量提升:怪...

  • ES6

    let const var 污染全局变量 导致变量提升 可以被重复声明 let 块级作用域 可以解决重复定义问题 ...

  • var,let,const 的区别

    变量提升 变量提升即将变量声明提升到它所在作用域最前面,而且仅仅是提升变量,不会提升所赋的值 执行流程 作用域 在...

  • 4.ECMAScript6(ES6)- let和const的特征

    变量提升问题不允许重复声明块级作用域 1、变量提升问题 (1)变量在提升之前就可以使用 (2)变量在提升之前不可以...

  • 变量提升问题

    这是 变量提升问题 1. 变量提升, 很简单,就是把变量提升提到函数的top的地方。我们需要说明的是,变量提升 只...

  • 作用域 和 闭包

    变量提升带来的问题 1. 后面定义的变量 会覆盖 前面的同名变量 因为变量提升, 后定义的变量 会在不...

  • JS—匿名函数与命名函数

    链接,我之前做的两篇笔记js变量作用域,里面提到定义函数的不同方式,导致的变量声明提升问题。还有这篇js特殊的对象...

  • JavaScript 中的提升(Hoisting)

    前言: JS中在声明函数与变量的时候是存在变量提升的问题,一不注意,有的时候会导致一些bug,本文主要就是针对JS...

网友评论

      本文标题:变量提升所导致的问题

      本文链接:https://www.haomeiwen.com/subject/uokoxxtx.html