发现不同了show() function show(){alert();}; 这样会没有问题show() var show = function(){alert();}; 这样就会出错可以看出 var show = function(){alert();}; 这样跟定义一个变量那样 function show(){alert();}; 这样定义的话到底是怎么一个过程呢
我看了dh20156的文章后我也测试了一下 按照我的理解function a(){alert("a")} b=a; function a(){ b(); alert("ok"); } 这里运行的顺序是 function a(){alert("a")} function a(){ b(); alert("ok"); } b=a; 而第二次a的定义覆盖了第一次即实际上是 function a(){ b(); alert("ok"); } b=a; 这样的话在定义a时b其实还没有定义运行 function a(){ b(); alert("ok"); } b=a; a(); 出现stack什么出错我觉得是这样所以出错的 不知道我想的对不对
function a(){ b(); alert("ok"); } b=a; a(); 这里应该是一个死循环吧
function show(){alert(2);}; show2 = show; function show(){alert(1);}; show(); show2(); 这里是1 1 function show(){alert(2);}; show2 = show; show = function (){alert(1);}; show(); show2(); 这里是1 2 这里也看出来第一个的执行顺序实际是 function show(){alert(2);}; function show(){alert(1);}; show2 = show; show(); show2(); 所以就产生那样的结果
按jxl76219的理解是show是show2的父类(不知是不是这样说,反正之间有关系)我一直的理解是 show2 = show; 仅仅把指针值复制给show2 并没有新建一个对象(只有一个对象怎么继承,自己继承自己?)要有继承要新建一个对象 象 function Car(){ } var car = new Car(); 这种 虽然看起来差不多但new是新建了一个对象的这才有继承等等东西的吧
我认为不一样的~~一个是方法...另一个赋个object吧?不知道是不是这样?
jxl76219可以试试 function show(){alert(2);}; show = function (){alert(1);}; show(); 如果show();是公共方法调用 那你还能找到所说的show()类么
to iamXiaMi()我觉得两个都是赋个object 只是执行顺序不同而已 就是一个会被预编译(到底是不是这么叫呢)另一个不会
关于继承我也弄不懂function show(){this.a = 1;}; var show2 = new show(); show = function (){this.a = 2;}; show.prototype.a = 3; var show3 = new show();alert(show2.a);//1 alert(show3.a);//2delete(show2.a); delete(show3.a);alert(show2.a);//u alert(show3.a);//3为什么alert(show2.a);这里是udf
function show(){alert();};
这样会没有问题show()
var show = function(){alert();};
这样就会出错可以看出
var show = function(){alert();};
这样跟定义一个变量那样
function show(){alert();};
这样定义的话到底是怎么一个过程呢
show()
</script>
<script type="text/javascript">
function show(){alert();};
</script>
这样的话就不行
估计是在同一个script内进行了内部定义
像function show(){alert();};这种形式的定义是在执行程序之前进行的
而var show = function(){alert();};这种是在执行这行代码时才定义的不知我想的对不对
还有show到底是一个函数 变量 还是对象呢
越搞越糊涂啊
自已的分析也是:
像function show(){alert();};这种形式的定义是在对整个<script>进行语法检查()编译时就执行了。
其它的代码是语法分析完后再按顺序执行的。
按照我的理解function a(){alert("a")}
b=a;
function a(){
b();
alert("ok");
}
这里运行的顺序是
function a(){alert("a")}
function a(){
b();
alert("ok");
}
b=a;
而第二次a的定义覆盖了第一次即实际上是
function a(){
b();
alert("ok");
}
b=a;
这样的话在定义a时b其实还没有定义运行
function a(){
b();
alert("ok");
}
b=a;
a();
出现stack什么出错我觉得是这样所以出错的
不知道我想的对不对
b();
alert("ok");
}
b=a;
a();
这里应该是一个死循环吧
show2 = show;
function show(){alert(1);};
show();
show2();
这里是1 1 function show(){alert(2);};
show2 = show;
show = function (){alert(1);};
show();
show2();
这里是1 2
这里也看出来第一个的执行顺序实际是
function show(){alert(2);};
function show(){alert(1);};
show2 = show;
show();
show2();
所以就产生那样的结果
http://www.mozilla.org/rhino/,有javascript开源引擎源码,
看了就通了.感觉楼主过于求甚解了.
我试着回答一下你们的问题function show(){alert(2);};
show2 = show;
function show(){alert(1);};
show();
show2();
这里是1 1
//以上这种没什么好回答的,应该可以理解吧function show(){alert(2);}; //可以理解为定义了一个show()的类
show2 = show;
//模拟继承了一个类,也可以这么写show2.prototype = new show()show = function (){alert(1);};
//这里是定义了一个公共方法show(); 公共方法调用 显示 1show2();
//实际调用的是show()类这里是1 2
我把show看成是指针function就是实际的内容function show(){alert(2);}; show->function (){alert(2);};
show2 = show; show2->function (){alert(2);};
show = function (){alert(1);}; show->function (){alert(1);};show();
show2();
显然结果是1 2 我觉得我理解的很简单也合理
楼上的我看不懂
show2 = show;
仅仅把指针值复制给show2
并没有新建一个对象(只有一个对象怎么继承,自己继承自己?)要有继承要新建一个对象
象
function Car(){
}
var car = new Car();
这种
虽然看起来差不多但new是新建了一个对象的这才有继承等等东西的吧
function show(){alert(2);};
show = function (){alert(1);};
show();
如果show();是公共方法调用
那你还能找到所说的show()类么
只是执行顺序不同而已
就是一个会被预编译(到底是不是这么叫呢)另一个不会
var show2 = new show();
show = function (){this.a = 2;};
show.prototype.a = 3;
var show3 = new show();alert(show2.a);//1
alert(show3.a);//2delete(show2.a);
delete(show3.a);alert(show2.a);//u
alert(show3.a);//3为什么alert(show2.a);这里是udf