== JS-6-作用域 - 域解析 ==

 

 

 

== JS-6-作用域 - 域解析 ==


作用域: 在一个区域内可以进行读写操作
作用: 读写

var a = 1; 那么向后会有读写的操作


如果这段代码
---------------------------
alert(a); // 弹出undefined
var a = 1;


这段代码报错
---------------------------
//这段代码直接报错了
alert(a);
a = 1;

 

浏览器
-> JS解析器 -> 执行:
(1) 根据 var function参数
(2) 逐行解析

 

根据 var, function 参数, 所有变量初始化设置为 undefined
{
1. 变量: var a;
预先在正式运行代码前,将变量都先预赋值为未定义。
2. 函数: function(){ }
预先在正式运行代码之前将函数原函数块整个拿出来看待。
}

逐行解析代码 修改预解析仓库内的值
每读取一行 都要回到仓库来看看有没有,并进行变量赋值, 函数执行
实际上是 执行 表达式。 修改仓库内的值。

函数没执行,只是代码块不能称为表达式。


alert(a);
var a = 1;
function a() { alert(2)}
alert(a);
var a = 3;
alert(a);
function a(){ alert(4)}
alert(a);


/* 分析: 两步骤 1.预解析 2.逐行执行代码

预解析:
a = undefined
a = function a(){ alert(2)}
a = 3
a = function a(){ alert(4)}

逐层覆盖后 预解析完成
a = function() { alert(4) }

逐行执行:


alert(a); // alert出 ` function() { alert(4) } `
var a = 1; // 修改仓库内的值 此时 a = 1
function a() { alert(2)} // 函数未调用故不执行
alert(a); // 1
var a = 3; // 修改仓库的值为 a=3
alert(a); // 3
function a(){ alert(4)} //此时 a没调用
alert(a); // 3
a() //会报错


*/

 

 

 

 

posted @ 2018-08-06 16:53  silvercell  阅读(1646)  评论(0)    收藏  举报