这类题型涉及到的知识点特别广泛,以此问来记录遇到的JS输出结果问题——长期更新
1.涉及到Function 的属性和方法
每个函数都包含两个属性:length和prototype。其中,length属性表示函数希望接收的命名参数的个数。(JS高级程序设计P116)
function fun(a,b){
console.log(fun.length);
}
fun(); // 2
2.JS中所有函数的参数都是按值传递
涉及到JS的传参问题,在JS中传参都是按值传递的。
ECMAScript中所有的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一变量一样。在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量。在向参数传递引用类型的值时,会把这个值在内存中的地址复制一个给局部变量,因此这个局部变量的变化会反映在函数的外部。
传递过去的foo是一个副本,它最终还是指向内存堆中的同一个方法,所以最后还是相当于调用了全局中的foo();
PS:详细请链接到页面 JS笔记——关于变量和作用域问题
var z = 10;
function foo(){
console.log(z);
}
(function(funArg){
var z = 20;
funArg(); //10
})(foo);