作用域、JS预解析、表达式
- 作用域:在一定范围内起作用。(一个函数就是一个作用域)
- JS预解析:变量(var a)、函数(函数块)、参数
- JS执行代码:在预解析完成以后,执行 表达式。函数声明不能改变值。
- 表达式:能改变值;函数声明不能改变值。
- 局部与全局:局部变量、函数(函数内);全局变量、函数(标签内)。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
script 全局变量、全局函数
自上而下
函数
由里到外
{}
浏览器:
“JS解析器”
1)“找一些东西” :var function 参数
a = ...
所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
fn1 = function fn1(){ alert(2); }
所有的函数,在正式运行代码之前,都是整个函数块
JS 的预解析
遇到重名的:只留一个
变量和函数重名了,就只留下函数
2)逐行解读代码:
表达式:= + - * / % ++ -- ! 参数……
表达式可以修改预解析的值!
alert(a); // function a (){ alert(4); }
var a = 1;
alert(a); // 1
function a (){ alert(2); }
alert(a); // 1
var a = 3;
alert(a); // 3
function a (){ alert(4); }
alert(a); // 3
alert( typeof a );
// a(); // 报错
*/
</script>
</head>
<body>
</body>
</html>
数据传输:全局获取局部;局部获取局部;局部获取全局
- 全局获取局部:定义新的全局变量。
- 局部获取局部:传参。
- 局部获取全局:直接使用全局变量,默认获取。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
var str = '';
function fn1(){
var a = '大鸡腿~';
str = a;
}
fn1();
function fn2(){
var a = '9999999克拉钻石23456789';
fn3(a);
}
fn2();
function fn3(a){
alert(a);
}
</script>
</head>
<body>
</body>
</html>
if(){} for(){} 内尽量不要包含function。火狐内不能对if for 内的function进行解析。