原因如下:
1、函数里面的变量不是全局变量,函数内部声明的变量一定是局部变量,所以想要外部访问是无法直接访问到的,请规范全局变量和局部变量的定义。
2、外部想要访问函数内的变量可以采用闭包来实现,代码实例如下:
functiontest(){var x=10
return function(){
return x
}
}
//调用局部变量x,报错未定义
alert(x)
// 调用
vara=test()
alert(a())
这样可以实现外部访问内部变量。
$(document).ready(function(){var x=0
});
这个是在当前jsp页面是全局变量,它只放在内存中了,你不用关心它何时销毁
这个要理解2个问题:值传递 和 引用传递。除基本类型的数据外(string boolean number)其他都是引用类型。
引用传递的是地址 而不是值。就好像在变量和值之间有个 中间人 ,如果要把这个 变量 赋值给另一个变量,那负责传递的就是那个中间人来做的,这样2个变量都通过同一个中间人接触到值了,也就2个变量共享一个值。如果任一个要改变当前变量的值,那另一个也会知道值改变了,2个变量始终会保持一致。而值传递没有中间人,它是把值直接复制一份再给别的变量。2个变量毫无关系。
var x=[] //定义引用类型的值
var y=0 //定义值类型的值
var test=function (x,y){
this.x=x
this.y=y
}
test.prototype={
test:function(){
this.x.push(23)//当实例对象后此时 局部x 与全局的x 都指向同一个 中间人(地址),共享同 //1个最终值。
this.y++//这样alert得不到1---》alert 取的是全局的那个 y,这里是局部变量,这2个无关。
}
}
Test=new test(x,y)//传人2个全局变量,x 引用类型 y值类型
Test.test()
alert(x+""+y)//这里的x 是全局对象与Test对象内部X 共享同一个值,故能取到23,而y这里仍然是 最开始定义的全局Y=0