javascript中作用域,优先级等等问题, 求助中。。。。。。。。。。。。。。。

suiqirui19872005 2007-10-01 12:48:01
<html>

<head>
<title>Untitled Page</title>
</head>
<body>

<!--脚本块1-->
<script>


alert(a);//undefined 第一个A

var a="dd";
alert(a);//dd 第二个A
</script>

<!--//脚本块2-->
<script>


alert(a);//function a(){} 第三个A

var a=function a(){};

alert(a);//function a(){} 第四个A


</script>

<!--脚本块3-->
<script>


alert(a);//function a(){} 第五个A

var a=function(){};

alert(a);//function(){} 第六个A
</script>


<script>
/*******************************************************
关于以上的不解点。
在上述中我只用了一个a,
弹出的结果写在了注释后面


问题1:

*********

为什么第三个A不是弹出[dd],而第五个A弹出[function a(){}],也就是说,
第三个没有延续 [脚本块1],而第五个就延续 [脚本块2]


**********



问题2:
***********
它的执行顺序是怎样的。。
每个脚本块它们为什么不同。。
***********



问题3
***************
当我将它们合为一个脚本块里。为什么结果变了呢?

//<script>


alert(a);//function a(){} 第一个A

var a="dd";

alert(a);//dd 第二个A




alert(a);//dd 第三个A

var a=function a(){};

alert(a);//function a(){} 第四个A





alert(a);//function a(){} 第五个A

var a=function(){};

alert(a);//function(){} 第六个A


<!--</script>-->

注意其中,第一个A变了,还有第三个A也变了。

与分成各个脚本块有什么不同吗??


***************





问题4
***************
额外的一个问题:

当我这样定义了一个脚本时。

var bi=function(){


this.aa=1;
this.aa=2;


}

bi.prototype.aa=3;

var bi=new bi();
alert(bi.aa); //2 ---->弹出是2

问题是。为什么原型属性a没有去覆盖i内部的aa属性呢。
而aa内部的属性可以被覆盖


就是说。为什么弹出的结果不是3呢??
有可能得到3吗?

***************

********************************************************/
</script>
</body></html>
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
suiqirui19872005 2007-10-05
  • 打赏
  • 举报
回复
从10月1号等到了10月5号,继续等待
suiqirui19872005 2007-10-01
  • 打赏
  • 举报
回复
我是lz,
对于第四个问题,
我主要问的是:
var bi=function(){


this.aa=1;
this.aa=2;


}

bi.prototype.aa=3;

在这个函数中,为什么bi 的原型方法没有去重写aa属性。。



@xiaolei1982
//经过测试只要你把
var a=function a(){};//var a=function a1(){};
//不要起相同的名字,前两个问题的结果就是正确的,
所以你这样操作感觉这本身就是一种错误

------------------------------

其实var a=function a(){};
这个没有错啊。
将a实际上是一个引用function a(){}这个方法的一个指针对象
xiaolei1982 2007-10-01
  • 打赏
  • 举报
回复
//经过测试只要你把
var a=function a(){};//var a=function a1(){};
//不要起相同的名字,前两个问题的结果就是正确的,
所以你这样操作感觉这本身就是一种错误
xiaolei1982 2007-10-01
  • 打赏
  • 举报
回复
我可以回答第四个问题:
首先js的构造函数定义方法合理的应该属性放入内部,方法定义在外部,而你要改变属性就可以通过参数传递,
进行初始化,注意别定义和函数一样的对象名,所以按照这种格式,我们通过原型方法就可以改变重载函数的方法。

var bi=function(i){
this.aa=i;
}
bi.prototype.bb=function(){return(this.aa)};
//bi.prototype.bb=function(){return("aaaaaa")};
var classBi=new bi(5);
alert(classBi.aa);
alert(classBi.bb());

其它关注@_@
joejoe1991 2007-10-01
  • 打赏
  • 举报
回复
学习学习。。。。 好贴啊。。。

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧