JavaScript变量作用域的问题
写了一个JAVA script 其中一个变量作用域问题想问问……下面一段java script代码 这个代码能运行正常 作用是把一副图片做一个漂浮广告
位置不因用户拉滚动条而变
<script language="javascript">
function floating()
{
var ImgY=50;
var targetImage = document.getElementById('floatingImg');
// Set the floating image's position
targetImage.style.top = ImgY+document.documentElement.scrollTop+"px";
}
window.onscroll = floating;
</script>
然后如果我改改这个代码
<script language="javascript">
var targetImage = document.getElementById('floatingImg');
function floating()
{
var ImgY=50;
// Set the floating image's position
targetImage.style.top = ImgY+document.documentElement.scrollTop+"px";
}
window.onscroll = floating;
</script>
我把targetImage的定义写在了函数的外面,这时就会运行出错了,floating函数里面会说我找不到targetImage对象……
问题就是 java script变量的作用域是什么?
为什么写在函数外面就不能访问呢?
追问:感谢您上面的回答,看了确实受益匪浅,您说道:上面说了。函数中调用的一切属性,都被当作obj的属性来处理,当用到该属性时,会从obj对象的scope chain中查找。
就是说,javascript和java一样,不允许像C、C++传统意义上的全局变量的存在,而必须封包在类里面吗?我不懂太多的编译原理,只对JAVA有点研究,是否可以把javascript里面的函数看成java里面的类,里面调用的所有属性都是自己的成员变量?
如果是这样,java里面可以调用其他类的静态方法和public的静态变量,javascript如果把函数看成一个类,调用如上面targetImage这个变量的时候,是否有办法可以把targetImage变为全局变量,或者把它变为其他类的静态方法让它可以被到处访问而不需多次定义?