Javascript作用域和变量提升

r囧r小猫 2022-08-20 15:25 290阅读 0赞

下面的程序是什么结果?

  1. var foo = 1;
  2. function bar() {
  3. if (!foo) {
  4. var foo = 10;
  5. }
  6. alert(foo);
  7. }
  8. bar();

结果是10;为什么呢,因为计算机处理这段代码的顺序是这样的:

  1. function bar(){var foo;if(!foo)(foo = 10;)alert(foo)}var foo;foo = 1;bar();

这里if(!foo),由于foo未被声明,所以!foo的值为true(不信可以alert试一下),所以if里面的语句会被执行,自然弹出的是10。

那么javascript中语句执行的顺序是什么规则呢?

  • 1 语言内置:所有的作用域里都有this和arguments;(译者注:经过测试arguments在全局作用域是不可见的)

  • 2 形式参数:函数的形式参数会作为函数体作用域的一部分;

  • 3 函数声明:像这种形式:function foo(){};

  • 4 变量声明:像这样:var foo;

就是按上面的序号依次往下执行。

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读