Ну в JavaScript вы можете думать, что прицелы определены мои фигурные скобки: {
И }
, и внутри области видимости переменных может быть переопределен, так что смотрите по адресу:
function x(){
var name=3;
var name=4;
console.log(name); // output is: 4
}
x();
Но это только половина правды, на самом деле происходит то, что интерпретатор просматривает код и перемещает все операторы var
в начало, тогда как им назначается undefined
(и все аргументы определяются и берутся из стека), а затем код, который вы написали, будет запущен. Так что любой var
после первого просто игнорируется. И код, который вы написали, равен:
function mytask(name,title){
var name = arguments[0];
var title = arguments[1];
name = name;
title = title;
var showalert = ("Hi " + name + " your job title is " + title);
console.log(showalert);
return showalert;
}
document.write(mytask("dan", "administrator"));
Таким образом, ваше повторное замедление и присвоение являются излишними. В любом случае - масштаб не меняется, ничто другое не будет отличаться.
Редактировать
интерпретатор переходит кода, с выполнением ничего, любое var x = y;
заявление разделится на var x = undefined;
и x=y;
. И var x = undefined;
будет перемещен в начало кода. И x=y;
будет в том же месте, что и исходное заявление. Если вы не понимаете вещи о стеке, не беспокойтесь, вот как компиляторы преобразуют вызовы функций в сборку - это стоит знать, если у вас есть время; но не главное здесь.
В любом случае - сразу после этих изменений и, возможно, некоторые оптимизации сделаны, полученный код выполняется. Это не тот код, который вы написали, а равный. То, что вы указали при переопределении аргументов, - это краевой случай, когда эти преобразования становятся видимыми.
Если бы вы могли, как бы вы относились к каждому из них? – cheeken
Вы имеете в виду, можете ли вы использовать именованные аргументы, которые вы передаете функции, как имена переменных в функции? Да, да, вы можете. У вас возникли проблемы с этим? –
Код работает. Однако я бы не хотел этого поддерживать. –