相关疑难解决方法(0)

让var或var让

在过去的几个月里,我一直在学习很多关于JavaScript的知识.多年来一直滥用语言,我敢说我现在对语言有了更好的理解,并且我开始喜欢它的功能性.
最近我接受了学习计划,但这只是为了好玩.浏览MDN引用我注意到JS虽然缺少块作用域,但确实有一个关键字可用于声明给定块的本地变量,就像Scheme的一样let:

for (var i=0;i<someArray.length;i++)
{
    console.log(someArray[i]);
}
console.log(i);//will log someArray's length
Run Code Online (Sandbox Code Playgroud)

鉴于:

for (let i=0;i<someArray.length;i++)
{
    console.log(someArray[i]);
}
console.log(i);//undefined
Run Code Online (Sandbox Code Playgroud)

所以我现在想知道的是:为什么不let经常使用?它与X浏览器支持有关吗?它只是那些鲜为人知的好东西之一吗?
简而言之,使用var过有let什么好处,有什么警告?

据我所知,行为let是,如果有的话,更一致(单个块中的双重声明引发一个TypeError,除了函数体(ECMA6草稿修复了这个).
说实话,除了这个功能/关键字我不是很了解,我很难想到任何反对使用letfor循环的论据,或者临时变量使代码更易读的地方.

javascript scope var let

15
推荐指数
1
解决办法
2917
查看次数

重新声明JavaScript变量

在以下代码中:

var greeting = "hi";

function changeGreeting() {
    if (greeting == "hi") {
        var greeting = "hello";
    }

    alert(greeting);
}

changeGreeting();?
Run Code Online (Sandbox Code Playgroud)

...... greeting未定义.但是,如果我删除var并更改changeGreeting()为:

function changeGreeting() {
    if (greeting == "hi") {
        greeting = "hello";
    }

    alert(greeting);
}
Run Code Online (Sandbox Code Playgroud)

......我按预期"打招呼".

我永远不会在我的代码中重新声明这样的变量,但为什么会发生这种情况呢?

javascript scope function

6
推荐指数
2
解决办法
2395
查看次数

如果在上部作用域中声明,则在本地作用域中未定义变量,并且在未执行的语句中在本地作用域中声明具有相同名称的var

function a(){
    var h = 1;
    function b(){
        alert(h);
    }
    b();
}
a();
Run Code Online (Sandbox Code Playgroud)

警报1 ;

function a(){
    var h = 1;
    function b(){
        if(false){
            var h = h * 2;
        }
        alert(h);
    }
    b();
}
a();
Run Code Online (Sandbox Code Playgroud)

警报未定义.为什么?

javascript

3
推荐指数
1
解决办法
245
查看次数

标签 统计

javascript ×3

scope ×2

function ×1

let ×1

var ×1