js基础(作用域问题)

现阶段初步接触了js,其中非常非常重要的就是它的作用域问题了,下面我会介绍怎么去分析js代码。
js代码的执行过程我们要知道,它分为两个步骤:
一、预解析,它又划分为两种:

变量预解析(变量提升) :指的是把所有变量声明提升到当前作用域的最前面,
这里不提升赋值操作

函数与解析(函数提升):指的是把所有函数声明提升到当前作用域的最前面,
这里不提升赋值操作

这里的概念不清楚不重要,下面有实际代码例子更好的帮助理解。
二、代码执行

拿到一个js代码,首先我们就得做预解析,以致于帮助我们自己写js,我开始从基础代码分析:
以下面代码为例:

<script>
	console.log(num);
	var num = 3;
</script>

这是一个非常基础的代码,我们得知道js实际执行过程:

var num;
console.log(num);
num = 3;

代码从上至下执行,由于num输出时没有初始值,结果为undefined
再来一个例子

<script>
	var num = 10;
	f1();
	function f1() {
		console.log(num);
		var num = 20;
	}
</script>

再来分析代码,还是预解析:

var num;
function f1() {
	var num;
	console.log(num);
	num = 20;
}
num = 10;
f1();

结果从上得知,就近原则取变量值;结果也会是undefined了。
这里的就近原则是指js的作用域链是从输出语句一层一层网上查找变量值,直到找到为止,例如:

<script>
        var num = 20;
        f1();
        function f1() {
            var num = 10;
            f2();
            function f2() {
                console.log(num);
            }
        }
 </script>

根据变量挨得最近的var num = 10; 从而就输出它的值10了,而不是最远的20。
这里就可以知道:我们原先赋值语句的位置并没有发生改变,只是把变量声明和函数声明提到最前面去了,这也可以很好的去理解预解析啦!

这里顺便说一下块级作用域:
上代码跟好理解
来一个简单的代码:

	<script>
        function f() {
            var num = 10;
            console.log(num);
        }
        f();
        console.log(num);
    </script>

这个js代码的运行结果:
在这里插入图片描述
因为我们在全局作用域下无法去访问块级作用域中的代码变量值,故就会报错了,但在块级作用域下却可以访问全局变量哦!
再上一个代码:

	<script>
        f1();
        console.log(b);
        console.log(c);
        console.log(a);
        function f1() {
            var a = b = c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
    </script>

这个js代码的运行结果:

在这里插入图片描述
根据块级作用域,不难得出,在程序的中间var a = b = c = 9; 指的实际上为:

var a = 9;
b = 9; 
c = 9;

a为局部变量,b和c都为全局变量,当在全局域中去访问局部变量的a值,自然就会报错了。

至此,这篇文章就结束了,刚刚接触js,其中还有语言术语的不严谨,望各位大佬指点错误。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值