函数的实参,也可以是任意类型,所以传递给函数的隐藏参数数组可以是任意类型
例: function () {
console.log("fn1");
return function () {
console.log("fn");
}
}
fn()();//打印结果为fn1
声明与预解析
1.变量声明
例:console.log(a);//打印结果为undefined
var a = 10 ;
上述代码在hosting模式中,解析为:
var a ;
console.log(a);
a = 10;
所以最后执行的结果时定义未赋值,打印为undefined
2.函数的声明
函数的声明:函数的声明无论在哪里定义一个函数,在预解析代码阶段都会吧函数声明提升到最顶部
例: var fn = function () {
}
等同于: var fn ;
fn = function (){}
3.既有变量提升,也有函数提升
注意:函数的提升优先于变量的提升
例: var fn = 10 ;
function fn (){
console.log("fn1");
}
fn = () ;
在编译器内部,这一段js代码预解析后:
function fn () {
console.log("fn");
}
var fn ;
fn = 10 ;
fn () ;
函数声明前置,然后是变量声明前置,然后代码一次执行。
因为var 给fn声明的是一个数值10,所以fn不能执行函数的内容。最后打印的结果是--fn is not a function--