初学js,一个很简单的问题,为什么函数外访问不到函数内的全局变量

functiona1(){num=5;}alert(num);函数内不加var不是就成为全局变量了吗,为什么浏览器显示numisnotdefined... function a1(){
num = 5;
}
alert(num);

函数内不加var不是就成为全局变量了吗,为什么浏览器显示num is not defined
展开
 我来答
码农小明哥
2016-01-24 · 互联网程序员一枚,欢迎交流
码农小明哥
采纳数:9602 获赞数:25062

向TA提问 私信TA
展开全部

原因如下:

1、函数里面的变量不是全局变量,函数内部声明的变量一定是局部变量,所以想要外部访问是无法直接访问到的,请规范全局变量和局部变量的定义。

2、外部想要访问函数内的变量可以采用闭包来实现,代码实例如下:

     functiontest(){
     var x=10;
     return function(){
         return x;
     }
 }
//调用局部变量x,报错未定义
 alert(x);
   // 调用
       vara=test();
        alert(a());

这样可以实现外部访问内部变量。

lqisa
推荐于2018-03-01 · TA获得超过274个赞
知道小有建树答主
回答量:242
采纳率:50%
帮助的人:146万
展开全部

我说一下我的见解吧

你这里的NUM确实是隐式的全局变量我不否认,但是你这是在函数运行时才定义的
JS也是从上到下运行的,function在里面你要是不去调用,他就不会运行,所以此处的num是未定义的


你可以这么写

function a1(){
    num = 5;
}
a1();
alert(num);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-06-18
展开全部
需要提前调用一下,可能js并不是编译期间提升其全局变量的地位的,只有当你主动调用一下,当运行时执行到赋值那句话时,其便会将其提升到全局变量。否则只会将其当做局部变量来处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luguofei
2016-04-22
知道答主
回答量:20
采纳率:0%
帮助的人:8.1万
展开全部
首先你这样定义的是一个隐式的全局变量,需要运行一下函数a1(),这样子num就成了全局变量。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式