js关于全局变量的问题?

为什么,我把变量定义到匿名函数的外边会报错呢?

图片描述

阅读 7.3k
13 个回答

window.onload的值是一个函数,而titles是这个函数中的变量,并不是全局变量。所以curTab()中不能访问,如果想在curTab()中访问,可以将function curTab(){} 放到window.onload里,即

window.onload = function (){
    var titles = ......
    // .....


    function curTab() {
        // do something
    }
}

function里面那那里是全局变量?你写成window.title = xxx也行啊

要不就直接在 fucntion 外面 var 一个

相当于
function onload(){
var a=0;
dosome();
}
function dosome(){
alert(a)
//a is not defined
}
onload();

onload本身也形成了一个内部作用域

你用$()包裹的就是jquery对象了,jquery对象没有getElementsByTagName方法
如果在jquery对象上使用原生js:

$('#notes-tit').get(0).getElementsByTagName('tagName');

当然直接用jquery更好咯:

$('#notes-tit li');
window.titles = xxx;
...
for(var i = 0, i < window.titles.length; i++) {}

你这是函数中,不是函数外啊,准确的说,你在函数里声明了变量,所以外部没有函数中的作用域,所以是访问不到的。。。

不是函数外,titles 在 window.onload的回调函数里

你这不是全局变量,在function里定义的。怎么能叫全局呢?想想

onload指向一个匿名函数,你在匿名函数定义了titles变量,这个变量的作用域就这个函数内部,在函数外是没有办法访问这个变量的。
js中,只有两种作用域 全局的和函数内部,或者说局部。
通过作用域链,局部的函数可以访问外层函数中定义的变量(或者说活动对象),外层的又可以访问再外层的,直到全局。

新手上路,请多包涵

js变量的查询遵循的是域,首先会在包裹曾的 { 。。。 } 中找变量,如果没有的话会继续向上层找查找

你要调用的变量也是在函数中定义的啊。
函数本身就能创建局部作用域,你这怎么调?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏