函数
函数定义
函数声明 第一种定义方式
弱数据类型:document.write(theFirstName);
直接打印出内容
fuction theFirstName() {
}
命名函数表达式 函数表达式 第二种定义方式
var test = function abc(){
document.write('a');
}
- 后面为表达式,表达式忽略名字,此处写abc也没有作用
- test.name 为 abc 其余两种方式函数名都是自己,这个函数名是后面的
匿名函数表达式 第三种定义方式 —常用
var demo = function (){
document.write('b');
}
- demo.name 为 demo
函数传参(不定参)
function test(a,b){
document.write(a + b);
//arguments -- [1,2,3] 实参列表 console.log(srguments);
}
test(1,2,3);
实参列表和里面的值一一对应,一个变都变,实参列表进去是几个就是几个
作用域
里面的可以用外面的,外面的不能用里面的
预编译
js执行顺序 1语法分析(看有没有错误) 2预编译 3解释执行:解释一行,执行一行
- 函数声明整体提升
- 变量 声明提升
预编译前奏
imply global
暗示全局变量:即任何变量,如果变量未经声名就赋值,此变量就为全局对象所有(window
就是全局的域)
eg: a = 123;
eg: var a = b= 123;
- 一切声明的
全局变量
,全是window
的属性
eg:var a = 123;–> window.a = 123;
函数预编译过程(预编译发生在函数执行的前一刻)
function fn(a){
console.log(a);
var a = 123;
console.log(a);
function a (){}
console.log(a);
var b = function () {}
console.log(b);
function d () {}
}
fn(1);
结果
function a (){}
123
123
var b = function () {}
预编译四步
- 创建AO对象 Activation Object(执行期上下文)
- 找形参和变量声明,将变量和形参名作为AO属性名字,值为undefined
- 将形参值和形参统一
- 在函数体里面找函数声明,值赋予函数体
全局预编译过程
和函数预编译过程相比 没有形参 第一步生成GO对象Global Object Go === Window