为什么,我把变量定义到匿名函数的外边会报错呢?
function里面那那里是全局变量?你写成window.title = xxx也行啊
要不就直接在 fucntion 外面 var 一个
http://.com/a/1190000003013952
不是函数外,titles 在 window.onload的回调函数里
你这是函数中,不是函数外啊,准确的说,你在函数里声明了变量,所以外部没有函数中的作用域,所以是访问不到的。。。
window.onload
的值是一个函数,而titles
是这个函数中的变量,并不是全局变量。所以curTab()
中不能访问,如果想在curTab()
中访问,可以将function curTab(){}
放到window.onload
里,即
window.onload = function (){
var titles = ......
// .....
function curTab() {
// do something
}
}
onload本身也形成了一个内部作用域
相当于
function onload(){
var a=0;
dosome();
}
function dosome(){
alert(a)
//a is not defined
}
onload();
你要调用的变量也是在函数中定义的啊。
函数本身就能创建局部作用域,你这怎么调?
你这不是全局变量,在function里定义的。怎么能叫全局呢?想想
你用$()
包裹的就是jquery
对象了,jquery
对象没有getElementsByTagName
方法
如果在jquery
对象上使用原生js
:
$('#notes-tit').get(0).getElementsByTagName('tagName');
当然直接用jquery
更好咯:
$('#notes-tit li');
onload指向一个匿名函数,你在匿名函数定义了titles变量,这个变量的作用域就这个函数内部,在函数外是没有办法访问这个变量的。
js中,只有两种作用域 全局的和函数内部,或者说局部。
通过作用域链,局部的函数可以访问外层函数中定义的变量(或者说活动对象),外层的又可以访问再外层的,直到全局。
window.titles = xxx;
...
for(var i = 0, i < window.titles.length; i++) {}
js变量的查询遵循的是域,首先会在包裹曾的 { 。。。 } 中找变量,如果没有的话会继续向上层找查找