2014-12-21 3 views
1

Я знаю, что это глупый вопрос, но я на самом деле путаюсь со следующим сценарием, который следующим образом ...
Я понял, что для каждой переменной нам нужно указать тип данных как var, или хотя это не очень хорошая практика, мы можем пойти без описание товара var как есть. Например
Мы можем использовать либо
Почему параметры в функциях JavaScript не нужны var как type?

var name = "kishore"; 

или просто

name = "kishore"; 

Но, когда речь идет о переменных, которые мы передаем в качестве параметров в функциях, почему не они принимают вар? Если я не ошибаюсь, я думаю, что они похожи на другую переменную, которая должна хранить некоторое значение, которое может быть доступно в этой функции. Если я укажу var, это даст ошибку. Я просто хочу знать, что там происходит ...?

+3

'var' - это не тип данных типа' int' или 'double' из статически типизированного языка. –

+0

Возможный дубликат [Что является функцией ключевого слова var и когда его использовать (или опустить)?] (Http://stackoverflow.com/questions/1470488/what-is-the-function-of-the- var-keyword-and-when-to-use-it-ormit-it) – JJJ

+0

@Juhana Это близко к тому, чтобы быть дубликатом, но меняет достаточно, что я думаю, что он стоит сам по себе. Связанный вопрос и принятый ответ не упоминают параметры в контексте использования 'var'. – JAAulde

ответ

5

var не является типом данных, но ключевое слово/оператор используется для объявления переменной в соответствующей области. Параметры функции уже привязаны к функции, для которой они являются параметрами, и это не меняется. Таким образом, использование var было бы излишним и не требовалось.

Некоторых комментируемых примеры кода:

// A globally accessible function 
var f1 = function (p1) { // p1 automatically scoped to f1 and available to all inner functions (like f2 below) 
    // A variable available in the scope of f1 and all inner functions (like f2 below) 
    var v1; 

    // f1, p1, v1, and f2 can be reached from here 

    var f2 = function (p2) { // p2 automatically scoped to f2 
     // A variable available in the scope of f2 
     var v2; 

     // f1, p1, v1, f2, p2, and v2 can be reached from here 
    }; 
}; 
+0

Итак, если я определяю переменные как var val1 = 2, var val2 = 5 и вызывать функцию как addValues ​​(a, b), передавая val1 и val2, то вы хотите сказать, что a имеет область действия val1, а b - val2? –

+0

№ Переменные привязаны к функциям, а не значениям. – JAAulde

+0

Хорошо, теперь это имеет смысл для меня.Спасибо :) –

1

var ключевым словом является для объявления новых переменных.

Параметры разные. Они уже существуют при вызове функции, объявление в заголовке функции просто дает имена уже имеющимся значениям.

Коллекция arguments содержит значения, которые передаются функции, и вы можете получить доступ к параметрам там, даже если они не объявлены как параметры в заголовке функции.

Пример:

function test1(a, b, c) { 
 
    show(a); 
 
    show(b); 
 
    show(c); 
 
} 
 

 
function test2() { 
 
    show(arguments[0]); 
 
    show(arguments[1]); 
 
    show(arguments[2]); 
 
} 
 

 
test1(1, 2, 3); 
 
test2(1, 2, 3); 
 

 

 
// show in Stackoverflow snipper 
 
function show(n) { document.write(n + '<br>'); }

1

Параметры, которые уже хранятся в области видимости функции в массиве аргументов, так что вам не нужно использовать вар:

function fun(t){ 
    console.log(arguments) 
}; 

fun('3'); 

Выход:

["3"] 
+0

Вы хотите сказать, что t уже выделил кусок пространства в массиве аргументов, прежде чем мы его назовем? заключается в том, что мы должны явно использовать var, который помогает создать новый блок памяти, который является избыточным в этой функции? –

+0

каждая функция имеет область видимости, которая имеет все, что с ней связано, в конце функция является объектом, хранящимся в памяти, аргументы в каждой функции хранятся внутри массива «аргументы» и могут быть получены с использованием этого массива или по его имени который передается функции, поэтому зачем использовать var! зачем создавать новую переменную и использовать больше места в памяти. –

+0

Я понял. Спасибо Большое:) –

Смежные вопросы