无法在javascript中访问全局变量

时间:2017-01-17 06:28:14

标签: javascript

根据我的说法,在javascript以上函数中声明的每个变量都视为全局变量。但就我而言,我无法访问该变量show undefined。这是jsfiddle

__getUserByRmId('sun1')
var firstCallFlag = 1;
function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}

5 个答案:

答案 0 :(得分:3)

这是因为变量是在调用函数后定义的。

你可以这样做。它会起作用。

var firstCallFlag = 1;
__getUserByRmId('sun1')

function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}

顺便说一句,提升是JavaScript 将所有声明移至当前范围顶部的默认行为。所以,这样的事情应该有用。

 firstCallFlag =1 ;
__getUserByRmId('sun1')

function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}
var firstCallFlag;

但是, JavaScript初始化未提升。因此,下面的代码将考虑变量firstCallFlag undefined。

__getUserByRmId('sun1')

function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}
var firstCallFlag = 1; 

答案 1 :(得分:2)

有一个词function and variable hoisting。当您创建functionvar变量时,它们会移到最顶层。但是functionsvariables之前提升优先。因此,当您致电function时,它会看到function,但却看不到variable

引擎会将您的代码解析为此并逐行执行。所以它没有看到variable

function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}

__getUserByRmId('sun1')

var firstCallFlag = 1;

您需要在变量声明

之后调用您的函数



var firstCallFlag = 1;

__getUserByRmId('sun1');

function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}        




答案 2 :(得分:2)

声明变量后调用该函数。函数将首先提升,然后提升变量。



var firstCallFlag = 1;
function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}
__getUserByRmId('sun1');




答案 3 :(得分:1)

var firstCallFlag = 1;
function __getUserByRmId(rmId) {
    console.log(firstCallFlag); 
}
__getUserByRmId('sun1');

因为你必须首先定义变量“firstCallFlag”然后调用函数__getUserByRmId('sun1'); ....变量在javascript中提升

答案 4 :(得分:1)

如果你仍然希望使用相同的方法模式而不在函数调用之上声明变量,那么你应该有这样的超时调用:

_getUserByRmId('sun1');

var firstCallFlag = 1;

function __getUserByRmId(rmId) {
   setTimeout(function(){
      console.log(firstCallFlag); 
   },1);        
}