var x=function (){alert(v)};//为什么这里没有声明x函数? 就是 function x() {alert(v)}调用的时候 一样的 写 x();
function x(){alert(2)}; x(); var x = function(){alert(0)}; x(); var x=function(){alert(1)}; x(); function x(){alert(3)}; x(); js被运行时会先检查代码中使用function x(){}定义的函数,并运行 function x(){alert(2)}; function x(){alert(3)}; 所以这两句被JS优先执行,然后函数X又被两次重写,所以结果是3,0,1,1应该是这么解释吧
JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的。而且,在同一段程序的分析执行中,定义式的函数语句会被提取出来优先执行。函数定义执行完之后,才会按顺序执行其他语句代码x();//这里运行时浏览器已经解析两个function x(),然后后面一个是3,所以第一次出来3 var x = function(){alert(0)};//然后再解析这个,所以下面出来0 x(); var x=function(){alert(1)};//然后再解析这个,所以下面出来1 x(); function x(){alert(3)};//已经解析过了,忽略,下面还是1 x();
<script type="text/javascript"> var v=10; var obj={v:2}; x(); with(obj) { var x=function (){alert(v)};//为什么这里没有声明x函数? x(); } x(); </script> //运行结果:什么也没有<script type="text/javascript"> var v=10; var obj={v:2}; x(); with(obj) { var x=function x(){alert(v)};//为什么这里就声明x函数了? x(); } x(); </script> //运行结果:10、2、2
var x=function x(){alert(v)};应该相当于 var y=x; function x(){ alert(v); }
第一个在ie相当于 var v=10; function x(){alert(v)} var obj={v:1}; x(); var x=function (){alert(obj.v)}; x(); x(); 第二个相当于 function x(){alert(2)}; function x(){alert(3)}; x(); var x = function(){alert(0)}; x(); var x=function(){alert(1)}; x(); x();
{alert(v)}调用的时候 一样的 写 x();
x();
var x = function(){alert(0)};
x();
var x=function(){alert(1)};
x();
function x(){alert(3)};
x(); js被运行时会先检查代码中使用function x(){}定义的函数,并运行
function x(){alert(2)};
function x(){alert(3)};
所以这两句被JS优先执行,然后函数X又被两次重写,所以结果是3,0,1,1应该是这么解释吧
var x = function(){alert(0)};//然后再解析这个,所以下面出来0
x();
var x=function(){alert(1)};//然后再解析这个,所以下面出来1
x();
function x(){alert(3)};//已经解析过了,忽略,下面还是1
x();
var v=10;
var obj={v:2};
x();
with(obj)
{
var x=function (){alert(v)};//为什么这里没有声明x函数?
x();
}
x();
</script>
//运行结果:什么也没有<script type="text/javascript">
var v=10;
var obj={v:2};
x();
with(obj)
{
var x=function x(){alert(v)};//为什么这里就声明x函数了?
x();
}
x();
</script>
//运行结果:10、2、2
var y=x;
function x(){
alert(v);
}
var v=10;
function x(){alert(v)}
var obj={v:1};
x(); var x=function (){alert(obj.v)};
x(); x(); 第二个相当于
function x(){alert(2)};
function x(){alert(3)};
x();
var x = function(){alert(0)};
x();
var x=function(){alert(1)};
x(); x();
http://hax.javaeye.com/blog/230182
http://lifesinger.org/blog/2009/01/javascript-run-mechanism/
var v=10;
var obj={v:2};
x();
with(obj)
{
var x=function (){alert(v)};//为什么这里没有声明x函数?
x();
}
x();
//运行这段代码,什么也不会出现。而下面的代码运行结果,却正常:
var v=10;
var obj={v:2};
x();
with(obj)
{
x=function x(){alert(v)};//为什么这里就声明x函数了?
x();
}
x(); 再稍微改动下代码,又不正常了:var v=10;
var obj={v:2};
x();
with(obj)
{
function x(){alert(v)};//
x();
}
x(); //运行结果都是:10、10、10 ,为什么不是 10、2、10?再看下面的代码:
var v=10;
var obj={v:2};
y();
with(obj)
{
y=function x(){alert(v)};
y();
}
y(); //运行结果,还是什么也没有。头大了,大了,说不清、讲不清了。怎么也弄不清了。请大侠们指点
而以 var x = funtion(){}方式定义时,这是一个无名函数,必须定义在执行以前;不知道说清楚了没有。。
1、with
2、this
3、js函数使用