2017-01-17 2 views
0

Как и я, каждая переменная, объявленная в javascript над функциями, рассматривается как глобальная. Но в моем случае я не смог получить доступ к этой переменной show undefined. Вот jsfiddleНевозможно получить доступ к глобальной переменной в javascript

код:

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

ответ

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.

__getUserByRmId('sun1') 

function __getUserByRmId(rmId) { 
    console.log(firstCallFlag); 
} 
var firstCallFlag = 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

Вызов функции после объявления переменной. Функция будет поднимать сначала, а затем переменные.

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

1

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

Сво beacuse вы должны определить переменную "firstCallFlag" первый, а затем вызвать функцию __getUserByRmId('sun1'); .... переменной Подъемно в JavaScript

1

Если вы все еще хотите для работы с одним и тем же шаблоном подхода, не объявляя переменную поверх вызова функции, тогда у вас должен быть такой тайм-аут, как это:

_getUserByRmId('sun1'); 

var firstCallFlag = 1; 

function __getUserByRmId(rmId) { 
    setTimeout(function(){ 
     console.log(firstCallFlag); 
    },1);   
} 
Смежные вопросы