好吧,在 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;
and x=y;
。并且var x = undefined;
将被移动到代码的顶部。并且x=y;
将与原始声明位于同一位置。如果您不了解有关堆栈的内容,请不要打扰,这就是编译器将函数调用转换为汇编的方式 - 如果您有时间,值得了解;但不是这里重要的事情。
无论如何 - 就在这些更改之后,也许进行了一些优化,结果代码被执行。这不是您编写的代码,而是相同的代码。您在重新定义参数时指出的是这种转换变得可见的极端情况。