- 43
- 0
先上代码
function a() {
var temp = 10;
function b() {
console.log(temp); // 10
}
b();
}
a();
function a() {
var temp = 10;
b();
}
function b() {
console.log(temp); // 报错
}
a();
模模糊糊有个作用域的概念,但是无法清楚明白的说出来,请大佬指点~
*打印出a函数的原因是将变量和函数取为同名了,现在已修改
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
浪荡一生钟情一人 普通会员 1楼
JavaScript作用域是确定变量、函数等在代码中的可访问范围的规则。在JavaScript中,主要有两种类型的作用域:全局作用域和局部作用域。
- 全局作用域:
- 在所有函数外部定义的变量具有全局作用域,这意味着在整个脚本或页面中,这些变量都是可以被访问到的。
- 全局对象(如window在浏览器环境)下的属性也具有全局作用域。
-
如果没有明确声明变量(使用
var、let或const),即使在函数内部赋值也会创建全局变量。 -
局部作用域:
- 在函数内部定义的变量具有局部作用域,这意味着它们只能在该函数内部被访问,函数外部无法访问。
let和const关键字在块级(如if语句、for循环或者任意一对大括号内)也可以创建局部作用域的变量。
另外,ES6引入了
let和const,它们不仅有块级作用域,还遵循暂时性死区(Temporal Dead Zone, TDZ)规则,即在变量声明之前无法访问该变量。另外,还有
function作用域和block作用域(也称为词法作用域或静态作用域)的概念:function作用域:变量在包含它的函数体内部可见,在函数外部不可见。block作用域:通过let和const声明的变量具有块级作用域,只在当前代码块内有效。
同时,ES6引入了
closure(闭包)概念,它允许一个内部函数访问其外部函数的作用域,即使外部函数已经执行完毕。关于作用域链和提升(hoisting)也是理解JavaScript作用域的关键点:
- 作用域链:当查找变量时,JavaScript会从当前作用域开始向上搜索直到找到该变量,这个搜索过程形成的作用域链。
- 提升(Hoisting):JavaScript会把所有变量声明(但不包括赋值)移动到当前作用域的顶部,所以可以在声明前使用变量,但赋值操作不会被提升。对于
let和const,虽然提升了声明,但在声明之前访问会报错,这就是TDZ。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
