与JavaScript范围混淆

这个问题在这里已经有了答案:

  • Javascript函数范围和提升14个答案
  • JavaScript中变量的范围是什么? 25个答案
  • 什么是词法范围? 12个答案

  • 我发现第一个例子更神秘...

    在第二个例子中,你不声明一个变量a函数的内部。 所以,当你分配给a ,它就瞄准了外部的a 。 非常直接。

    在第一个例子中,你在函数内部声明了一个变量a ,但以一种不寻常的方式:通过声明一个名为a的函数。 因此,分配给a将使用该本地“变量”。

    这里有两件事要拿走:

    a)变量和函数声明被“悬挂”到其范围的顶部。 虽然function a(){}写在最后,但是变量a已经被创建并且在范围的顶部可见。

    b)函数也可以用作变量。 你可以传递函数,你可以重新分配函数定义。 它们与其他变量共享相同的命名空间。


    因为当你使用一个声明的function它被挂起并转换成一个函数表达式,即var a = function() {}; 这是与您a变量创建冲突。


    您可以使用Visual-Studio进行编码:

    在TypeScript-File中对代码进行编程将使您能够通过悬停变量来查看变量类型。

    当您尝试将数值10应用于首先被声明为函数的变量“a”时,它也会警告您。 这就是我喜欢的TypeScript,你可以在这里获得更多关于它的信息:http://www.typescriptlang.org/

    链接地址: http://www.djcxy.com/p/40821.html

    上一篇: Confusion with JavaScript scoping

    下一篇: When do I use var?