02-作用域链
2016-07-27 本文已影响9人
Young_Blood
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<script type="text/javascript">
// 1:如何区分私有变量和全局变量 ?
// 1.1在全局作用域下声明(预解释的时候)的变量是全局变量
// 1.2在 "私有作用域中声明的变量" 和 "函数的形参" 都是私有的变量
// 在私有作用域中,我们代码执行的时候遇到了一个变量,首先需要确定他是否为私有变量,如果是私有变量.那么和外边的任何东西都没有关系:如果不是私有的则往当前作用域的上一个作用域查找,如果上级中也没有则继续查找,一直找到Window为止 ( 作用域链 )
// 2当函数执行的时候(直接目的:让函数体重的代码执行),首先会执行一个新的私有的作用域,然后按照如下的步骤执行
// 2.1如果有形参,先给形参赋值
// 2.2进行私有作用域中的预解释
// 2.3私有作用域中的代码从上到下执行
// 2.4函数形成了一个新的私有的作用域保护了里边的私有变量不收外界的干扰(外边修改不了私有的,私有的也影响不了外边的) -->"闭包"
// console.log(total); // undefined
// var total = 0;
// function fn(num1,num2) {
// console.log(total); // undefined
// var total = num1 + num2;
// console.log(total); // 300
// }
// fn(100,200);
// console.log(total); // 0
console.log(total); // undefined
var total = 0;
function fn(num1,num2) { // total不是私有的,找全局下的total,也就是这里边出现的total
console.log(total); // 0
total = num1 + num2; // 全局的total = 300;
console.log(total); // 300
}
fn(100,200);
console.log(total); // 300
</script>
</body>
</html>