JS的解析与执行——函数预处理与执行
2017-12-13 17:42
204 查看
JS中对函数解析与执行也是分为两个阶段,也是分为预处理阶段与执行阶段。函数的预处理阶段,每调用一次,产生一个Lexical Environment。与全局预处理不同的是,在函数中产生中的词法环境对象我们访问不了的。需要注意的一点是,函数的参数,在调用的时候已经加入到全局词法环境(Lexical Environment)对象中。函数预处理的内部声明式函数,内部var声明的变量以及解决冲突的策略与全局预处理相同。
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>函数与处理与执行</title>
</head>
<body>
<script>
function foo(a,b) {
console.log(a);
console.log(b);
var b =100;
function a(){
console.log("function.a");
}
}
foo(5,6);
</script>
</body>
</html>
预处理阶段
Lexical Environment{
a:执行函数的引用 //a:5,冲突,被覆盖
b:6 //var b=100,冲突,被忽略
arguments:2
}
在执行阶段会给预处理阶段的成员赋值。
在执行阶段,如果没有用var声明的变量,会成为最外部Lexical Environment的成员。
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>函数与处理与执行</title>
</head>
<body>
<script>
function f1(){
function f2(){
bb="在执行阶段,如果没有用var声明的变量,会成为最外部Lexical Environment的成员";
};
f2();
}
f1();
console.log(window.bb);
</script>
</body>
</html>
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>函数与处理与执行</title>
</head>
<body>
<script>
function foo(a,b) {
console.log(a);
console.log(b);
var b =100;
function a(){
console.log("function.a");
}
}
foo(5,6);
</script>
</body>
</html>
预处理阶段
Lexical Environment{
a:执行函数的引用 //a:5,冲突,被覆盖
b:6 //var b=100,冲突,被忽略
arguments:2
}
在执行阶段会给预处理阶段的成员赋值。
在执行阶段,如果没有用var声明的变量,会成为最外部Lexical Environment的成员。
代码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>函数与处理与执行</title>
</head>
<body>
<script>
function f1(){
function f2(){
bb="在执行阶段,如果没有用var声明的变量,会成为最外部Lexical Environment的成员";
};
f2();
}
f1();
console.log(window.bb);
</script>
</body>
</html>
相关文章推荐
- 解析页面加载与js函数的执行 onload or ready
- JS的解析与执行——全局预处理
- ECMASCRIPT——Js中的数据类型、运算符、流程控制、函数作用域链、预解析、匿名函数自执行、怪异的几个地方
- Js的全局预处理、解析与执行
- 解析页面加载与js函数的执行 onload or ready
- js 函数的执行环境和作用域链的深入解析
- js 函数的执行环境和作用域链的深入解析
- js 函数的执行环境和作用域链的深入解析
- JS的解析与执行——全局预处理命名冲突解决策略与执行
- 同时加载执行多个js函数addLoadEvent()
- js自执行函数
- 页面加载完成后自动执行一个方法函数的JQ、JS方法
- JS分段(<script/>)解释执行:先解析(定义变量+函数)后执行
- JS 立即执行的函数表达式(function)写法
- js中(function(){…})()立即执行函数写法理解
- js中(function(){…})()立即执行函数写法理解
- 在网页中JS函数自动执行常用三种方法
- 用js函数处理事件时,有时候可能因为页面部分组件不需要显示,但仍需要执行js,会有报错,但是不想暴露页面,是业务正常进行。。。。
- js 把字符串当函数执行的方法
- js bind 函数 使用闭包保存执行上下文