JS中输出结果问题——长期更新

这类题型涉及到的知识点特别广泛,以此问来记录遇到的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);
posted @ 2017-03-26 22:14  FIONA-SUN  阅读(993)  评论(0编辑  收藏  举报