11.2 函数调用//f(); --->OKfunction f(){console.log("hello")}f() //----->OK不同于python,js代码在运行时,会分为两大部分———预编译 和 执行阶段 。
- 预编译:会先检测代码的语法错误,进行变量、函数的声明 。
- 执行阶段:变量的赋值、函数的调用等,都属于执行阶段 。
function add(x,y) { return x+y }var ret = add(2,5);console.log(ret)11.5 匿名函数匿名函数,即没有变量名的函数 。在实际开发中使用的频率非常高!也是学好JS的重点 。
// 匿名函数赋值变量var foo = function () {console.log("这是一个匿名函数!")};// 匿名函数的自执行(function (x,y) {console.log(x+y);})(2,3)// 匿名函数作为一个高阶函数使用function bar() { return function () { console.log("inner函数!") }}bar()()11.6 函数作用域变量的作用域有全局作用域和局部作用域两种 。
// 局部变量,是在函数内部声明,它的生命周期在当前函数被调用的时候, 当函数调用完毕以后,则内存中自动销毁当前变量// 全局变量,是在函数外部声明,它的生命周期在当前文件中被声明以后就保存在内存中,直到当前文件执行完毕以后,才会被内存销毁掉11.7 JS预编译js运行三个阶段:
- 语法分析
- 预编译
- 解释执行
全局预编译的3个步骤:
- 在js脚本加载之后,会先通篇检查是否存在低级错误;
- 在语法检测完之后,便进行全局预编译;
- 在全局预编译之后,就解释一行,执行一行;
- 当执行到函数调用那一行前一刻,会先进行函数预编译,再往下执行 。
- 创建GO对象(Global Object)全局对象,即window对象 。
- 找变量声明,将变量名作为GO属性名,值为undefined
- 查找函数声明,作为GO属性,值赋予函数体
- 创建AO对象(Activation Object)执行期上下文 。
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined
- 将实参值和形参统一 。
- 在函数体里面找函数声明,值赋予函数体 。
GO对象是全局预编译,所以它优先于AO对象所创建和执行局预编译
GO/window = { a: undefined, c: undefined, foo: function(a) { console.log(a); var a = 123; console.log(a); function a() {} console.log(a); var b = function() {} console.log(b); function d() {} } }
经验总结扩展阅读
- 唐朝李镇宗是怎么死的 李镇宗简介
- JavaScript for循环的终止问题
- JavaScript常用工具函数
- Django的简单使用
- 1.docker的基本使用
- 1.python基础使用
- 除夕别称是什么 除夕的风俗有哪些 简介
- 口红哪种牌子比较好用?荷兰口红品牌排行榜简介
- 王者男陪玩简介 王者荣耀陪玩简介怎么写吸引人
- 王者陪玩简介幽默 王者荣耀女陪玩介绍怎么说
