Javascript 起重变量和函数参数?
考虑以下示例:Javascript 起重变量和函数参数?,javascript,hoisting,Javascript,Hoisting,考虑以下示例: function a(a){ console.log(a); function a(){} var a=7; console.log(a); } a(10) 那么为什么第一次打印是一个函数而不是10 函数声明在编译时本身被解析,并且声明被移动到函数的顶部,如下所示 function a(a) { var a = function a() {}; console.log(a); a = 7; console.log(
function a(a){
console.log(a);
function a(){}
var a=7;
console.log(a);
}
a(10)
那么为什么第一次打印是一个函数而不是10 函数声明在编译时本身被解析,并且声明被移动到函数的顶部,如下所示
function a(a) {
var a = function a() {};
console.log(a);
a = 7;
console.log(a);
}
a(10)
这就是为什么您会在第一个
控制台中获得[Function:a]
或类似的东西。log
。当线路a=7时代码>被执行,a
被分配值7
。这就是为什么第二个console.log
打印7
的原因,这正是因为提升的缘故。你在用那个词,但你似乎还没有研究它的意思。。。?!我知道提升,但当有函数参数时,我会感到困惑。当函数执行时,函数参数是如何解析的?@SIMDD它们类似于函数中声明的变量。但在本例中,提升后,没有看到函数参数分配?您在谈论哪个函数?还有哪些参数?调用函数时,a
仅为10。但是函数的第一行是将函数对象分配给变量a
。因此,值10将替换为函数对象。