作用域要从两个步骤去理解这个概念:
1>首先要找到诸如 var function 参数 之类
alert(a);var a = 3;
alert(a)是 ‘未定义‘
所有的变量,在正式运行代码前,都提前赋了一个值:未定义
fn1 = function fn1(){ alert(2); }
所有的函数,在正式运行代码之前,都是整个函数块
遇到重名的:只留一个,变量和函数重名了,就只留下函数
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 ???????????????a(); ???????//a is not a function
var a = 1;function fn1(){ ???alert(a); ???????//undefined ???????????????????var a = 2;}fn1(); ??????????alert(a); ????????//1
var a = 1;function fn1(){ ???alert(a); ???????????????????????????a = 2;}fn1(); ?????????//1alert(a); ???????//2 ???????
var a = 1;function fn1(a){ ?????//参数a = var a ???alert(a); ???????//undefined ???????????????????a = 2;}fn1();alert(a); ???????????//2
var a = 1;function fn1(a){ ???alert(a); ???????????????????????// 1 ???a = 2;}fn1(a);alert(a); ???????????????????????????// 1
关于js的作用域,自我认知
原文地址:https://www.cnblogs.com/gao-xiaomeng/p/9553135.html