根据我的说法,在javascript以上函数中声明的每个变量都视为全局变量。但就我而言,我无法访问该变量show undefined
。这是jsfiddle
码
__getUserByRmId('sun1')
var firstCallFlag = 1;
function __getUserByRmId(rmId) {
console.log(firstCallFlag);
}
答案 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。当您创建function
和var
变量时,它们会移到最顶层。但是functions
在variables
之前提升优先。因此,当您致电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);
}