Javascript小进阶6--函数细节
函数细解:
1. 函数的声明三种:
a. 普通直接方式:
function say(name){alert(name);}
b. 变量初始化的方式:
var say = function(name){ alert(name);};
c. 原始方式:
var say = new Function(‘name’,” alert(name);”);
注意:c种方式能体现js中“函数也是对象,函数名是指针”。不过这种声明方式很损性能:第一次是ECMAScript代码,第二次是解析传入构造函数中的字符串;故少用。
2. 由于函数也是对象,即变量,所以,我们可以将一个函数作为值进行传参。
function getSum(sumFunc , x,y){
return sumFunc(x ,y);
}
function sum (x ,y){
return x+y;
}
getSum(sum , 2 , 3);//!!!
再深入点:
js函数作为对象,要注意以下属性:
我们在浏览器console中 执行:
Object.getOwnPropertyNames( function(){….} );
结果:
["length", "name", "arguments", "caller", "prototype"]
解析:
length: 函数的参数的个数
name : 当前函数的名字:用在多个函数的循环中
arguments : 一个类数组对象,包含着在函数运行过程中传入函数中的所有参数,其中一个属性callee指向当前函数对象,可用在递归;
caller :
prototype : 指向原型对象。
然而由此引发我的问题来了:
1. Js中函数参数如何声明:不确定的参数个数?例如Function(‘’,’’ ‘’,’’ ‘’,’’……)
2. Js函数对象创建时底层如何实现获取此函数的名字?
3. Js函数开始执行前做了什么工作:例如将传参封装到arguments对象中之类的
目前本人尚未解决,后续。。。。。。