当前位置:   article > 正文

javascript函数作用域_js函数的三种作用域

js函数的三种作用域

什么是作用域
Javascript中的作用域说的是变量的可访问性和可见性。也就是说整个程序中哪些部分可以访问这个变量,或者说这个变量都在哪些地方可见。
为什么作用域很重要
作用域最为重要的一点是安全。变量只能在特定的区域内才能被访问,有了作用域我们就可以避免在程序其它位置意外对某个变量做出修改。作用域也会减轻命名的压力。我们可以在不同的作用域下面定义相同的变量名。
作用域的类型
在javascript中有三种作用域:
1.全局作用域
2.函数作用域(也叫局部作用域)
3.块级作用域(这个是ES6为我们提供的,也属于局部作用域)
局部作用域
和全局作用于相反,局部作用域一般只能在固定代码片段内可以访问到。最常见的就是函数作用域。
函数作用域
定义在函数中的变量就在函数作用域中。并且函数在每次调用时都有一个不同的作用域。这意味着同名变量可以用在不同的函数中。因为这些变量绑定在不同的函数中,拥有不同作用域,彼此之间不能访问。

			//全局作用域
			function test() {
				var num = 9;
				//内部可以访问
				console.log("test中" + num);
			}
			//test外部不能访问
			console.log("test外部" + num);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意点:
如果在函数中定义变量时,如果不添加var关键字,造成变量提升,这个变量成为一个全局变量。

function doSomeThing() {
				// 在工作中一定避免这样写
				thing = 'writting';
				console.log('内部:' + thing);
			}
			console.log('外部:' + thing)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

任何一对花括号{…}中的语句集都属于一个块, 在es6之前,在块语句中定义的变量将保留在它已经存在的作用域中:

var name = '甜三岁';
for(var i=0; i<5; i++){
    console.log(i)
}
console.log('{}外部:'+i);
// 0 1 2 3 4  {}外部:5
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

我们可以看到变量name和变量i是同级作用域。
在ES6块级作用域未讲解之前注意点
变量提升
变量提升英文名字hoisting,MDN中对它的解释是变量申明是在任意代码执行前处理的,在代码区中任意地方申明变量和在最开始(最上面)的地方申明是一样的。也就是说,看起来一个变量可以在申明之前被使用!这种行为就是所谓的“hoisting”,也就是变量提升,看起来就像变量的申明被自动移动到了函数或全局代码的最顶上。 看一段代码:

var tmp = new Date();
			function f() {
				console.log(tmp);
				if (false) {
					var tmp = 'hello';
				}
			}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这道题应该很多同学都遇到过,有人会认为输出的是当前日期。但是正确的结果是undefined。这就是由于变量提升造成的,在这里申明提升了,定义的内容并不会提升,提升后对应的代码如下:

var tmp = new Date();
function f() {
    var tmp;
    console.log(tmp);
    if(false) {
        tmp='hello';
    }
}
f();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

console在输出的时候,tmp变量仅仅申明了但未定义。所以输出undefined。虽然能够输出,但是并不推荐这种写法推荐的做法是在申明变量的时候,将所用的变量都写在作用域(全局作用域或函数作用域)的最顶上,这样代码看起来就会更清晰,更容易看出来哪个变量是来自函数作用域的。
目前我就说这么多,萌新初来,有很多不足的地方请多多指教,中国加油,武汉加油

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/510710
推荐阅读
相关标签
  

闽ICP备14008679号