首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带关键字var的javascript中的范围

不带关键字var的javascript中的范围
EN

Stack Overflow用户
提问于 2018-02-28 05:33:07
回答 2查看 62关注 0票数 0
代码语言:javascript
运行
复制
function jjj(asi) {
  asi=3;
}

jjj();
console.log(asi);

在这里,我认为asi是一个全局变量,但是在运行这段代码时,它给出的是没有定义asi

根据书籍和官方文档,我已经研究过,如果您在没有关键字var的情况下提到变量名,那么它就变成全局的,所以我认为同样的规则也适用于asi变量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-28 05:39:28

在这里,我认为asi是一个全局变量,但是在运行这段代码时,它没有定义asi。

如果不是将声明为参数,则将创建一个隐式全局,例如:

代码语言:javascript
运行
复制
function jjj() {
//           ^---------- removed `asi` here
  asi = 3;
}
jjj();
console.log(asi);

请注意,隐式全局值是一个非常糟糕的主意(我将关于它们的博客文章称为是有原因的),您应该使用严格模式来使它们产生它们应该一直存在的错误:

代码语言:javascript
运行
复制
"use strict";
function jjj() {
  asi = 3; // ReferenceError: asi is not defined
}
jjj();
console.log(asi);

票数 2
EN

Stack Overflow用户

发布于 2018-02-28 05:39:00

在您的示例中,函数参数是用一个新值重新分配的。

代码语言:javascript
运行
复制
function jjj(asi) {
  asi = 3 // the function argument will have new value
  mno = 4 // this will be a global variable
}
jjj();
console.log(asi);
console.log(mno);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49022581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档