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

JavaScript010

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

原因如下:

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