在函数内部创建全局变量 - 为什么这样做?

时间:2017-01-18 19:37:15

标签: javascript function variables global local

据我所知,函数内声明的变量是局部变量(使用var关键字)。 如果是,那么为什么输出5?在致电ReferenceError时我不应该func2,因为x只知道func1吗?

<script>
    function func1(){
       x = 5;
    }

    function func2(){
       document.write(x);
    }

    func1();
    func2();
</script>

4 个答案:

答案 0 :(得分:2)

这是因为您没有将其定义为

function func1(){
   var x = 5;
}

这意味着JS将使用不存在的全局变量x,但是当你运行func1时将会这样。

“var”的添加定义了func1的本地范围内的变量。

答案 1 :(得分:2)

  

Afaik,在函数内声明的变量是局部变量(使用var关键字或不使用)。

函数内的变量声明是本地的,但您没有声明任何变量。你拥有的是所谓的“隐含的全局”,它只能在“草率模式”下工作。

来自MDN

  

在执行赋值时,为未声明的变量赋值会隐式地将其创建为全局变量(它将成为全局对象的属性)。

在严格模式下,您的代码会产生错误:

"use strict";

function func1() {
  x = 5;
}

function func2() {
  document.write(x);
}

func1();
func2();

答案 2 :(得分:1)

function func1(){
   x = 5;
}

相当于

var x; // In global scope
function func1(){
   x = 5;
}

由于变量未通过声明限定为func1

如果是这种情况,那么您将在控制台中遇到错误,因为您正在尝试访问尚未定义的变量。

function func1(){
   var x = 5;
}

答案 3 :(得分:0)

get-branding-information