四时宝库

程序员的知识宝库

前端中如何理解JS的作用域?(js有哪些作用域,分别是什么意思)

ES6 之前 JS 没有块级作用域。

举例:

if (true) {

var name = 'zhangsan'

}

console.log(name)

从上面的例子中,我们可以理解范围的概念。

作用域是一个独立的领域,因此变量不会被暴露。

上面的“name”已公开。因此,JS没有块级作用域,只有全局作用域和函数作用域。

举例:

var a = 100

function fn() {

var a = 200

console.log('fn', a)

}

console.log('global', a)

fn()

全局作用域就是最外层的作用域,如果我们写了很多行 JS 代码,变量定义都没有用函数包括,那么它们就全部都在全局作用域中。

这样的坏处就是很容易撞车、冲突。

// 张三写的代码中

var data = {a: 100}


// 李四写的代码中var data = {x: true}

这就是为什么jQuery、Zepto和其他库的所有源代码都放在“(function(){……})()”中的原因。因为放在里面的所有变量都不会被暴露、污染或影响其他库或JS脚本。

这是功能范围的一个实施例。

ES6 中开始加入了块级作用域,使用`let`定义变量即可,例如:

if (true) {

let name = 'zhangsan'

}

console.log(name) // 报错,因为let定义的name是在if这个块级作用域。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接