Confusion with JavaScript scoping

This question already has an answer here:

  • Javascript function scoping and hoisting 14 answers
  • What is the scope of variables in JavaScript? 25 answers
  • What is lexical scope? 12 answers

  • I find the first example more mysterious...

    In the second example, you do not declare a variable a inside of the function. So when you assign to a , it targets the a on the outside. Pretty straight-forward.

    In the first example, you declare a variable a inside of the function, but in an unusual way: By declaring a function called a . So assigning to a will use that local "variable".

    Two things to take away here:

    a) Variable and function declarations are "hoisted" to the top of their scope. While function a(){} is written near the end, the variable a to hold it is already created and visible at the top of the scope.

    b) Functions can be used as variables as well. You can pass functions around, you can re-assign function definitions. They share the same namespace with other variables.


    Its because when you use a declared function it is hoisted up and turned into a function expression, ie var a = function() {}; This is creating a clash with your a variable.


    You can use Visual-Studio for coding:

    Programming the code in a TypeScript-File will enable you to see the variable Types by hovering the variable.

    It will also warn you, when you try to apply the numerical-value 10 to the variable "a", that was first declared to be a function. That's what I love about TypeScript, you can get more Information about it here: http://www.typescriptlang.org/

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

    上一篇: 为什么x在内部范围内未定义?

    下一篇: 与JavaScript范围混淆