函数
定义
函数声明
function hello(){
document.write("hello world");
}
函数表达式
命名函数表达式
var hello = function hello(){
document.write("hello world");
}
匿名函数表达式
var hello = function(){
document.write("hello world");
}
函数的终止
return
返回值并终止函数
立即执行函数
针对初始化功能的函数
(function (形参列表){
var a = 123;
var b = 234;
console.log(a + b);
}(实参列表))
(function (){}());
(function (){})();
只有表达式才能被执行符号执行
作为表达式被执行的函数会忽略函数名
预编译
- imply global 暗示全局变量:即任何变量,如果未经声明就赋值,此变量就为全局对象所有
预编译过程
-
创建AO对象
-
找形参和变量声明,将变量和形参作为AO属性名,值为undefined
-
将实参值和形参统一
-
在函数体里面找函数声明,值赋予函数体
作用域
[[scope]]
每个JavaScript函数都是一个对象,对象中有一些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[[score]]指的就是其中的一个
[[score]]指的就是我们所说的作用域,其中存储了进行期上下文的集合
作用域链
[[score]]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种连接形式叫做作用域链
执行期上下文
当函数执行时,会创建一个称为执行期上下文的内部对象.一个执行期上下文定义了一个函数执行时的内部环境,函数内次执行时对应的执行期上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行期上下文,当函数执行完毕,它所产生的执行期上下文被销毁
查找变量
从作用域链的顶端依次向下查找