本文目录一览:
- 1、js关于作用域的问题
- 2、js 变量作用域问题
- 3、关于JS变量作用域的问题
js关于作用域的问题
首先说一下js全局变量的作用域:
在js中如果直接定义一个变量,都是在window这个作用域下定义的
比如
var num = 60
也可以写成这样
window.num = 60
这两个写法是完全一样的,不管哪种写法,使用 console.log(num, window.num) 都可以打印出来 num的值
相对于题主的这个例子:
函数内部声明一个局部变量需要 加 var关键字,如果没有 var,根据向上查找原则,就会去方法 f1 上层去查找 num 变量,如果有,直接拿来用,如果没有就会继续再向上层查找,如果到了 window域 下还没找到,这时 就会在 window域 下创建一个 num变量
所以这个例子打印结果是 60
再说这一个例子
f1 中使用 num变量,在方法形参中 已经有一个 num
实际上,在js加载过程中,编译器在编译过程中已经在 f1 中对 num变量 进行了声明,也就是说 num 已经是 f1 作用域下的一个变量了,所以,在函数内再使用 num的时候,就是在使用 f1作用域下的 num变量,而不会再向上层查找
js 变量作用域问题
var changefunc="xmlHttp.onreadystatechange = "+functionName;
你就没写参数过去,自然不会接到,你的AJAX写的太乱
var functionName=function (classid,id,pagenum)
这里的参数只是形参,不是实参,所以这些参数没有全局作用域
你想用到实参,那就把classid,id,pagenum定义成全局变量吧,定义到函数体外面
关于JS变量作用域的问题
v2=80,v3=40
1、这个v2和v3,都是a里面定义的局部变量:
function a(){
var v2, v3;
2、v2=80,是调用b函数时,b函数直接对b外部的v2进行了赋值,最近的是a函数的v2,所以最终alert的v2是80
3、b函数虽然对v3赋值为80,但是v3是参数里的v3,并不是a函数的v3,对参数v3进行赋值,不会改变a函数的v3,所以alert的v3不变,还是40
另外,楼上的回答虽然有一定道理,但是只是针对同一个人写同一个项目而言,
实际的工作开发中,引用多个其它人开发的js,甚至其它公司开发的js都是常事,所以出现上面的类似代码也是可能的,另外,这个例子对于理解js的变量作用域还是有一定意义的