javascript函数小知识
javascript中的函数跟其他语言的函数有很大的不同,让人觉得怪怪的。尤其是有无括号、有无new,结果大不同,this指向也有莫测的变化。
<script type="text/javascript">
//关于函数小知识,wallimn
function func(){
this.id='func';
}
var a = func;//把func对应的函数赋值给a,此函数并没有被执行。此后,a()相当于func(),也就是说a、func指向相同的函数体。
console.log(a)//输出为函数定义
console.log(a.id);//输出为undefined
console.log(window.id);//输出为undefined,因为只进行了函数赋值操作,函数没有执行
var b = func();//把func函数的执行结果赋值给b,func函数没有返回值,那么b为undefined。此过程中func体中的this指window。根据window.id的输出可知
console.log(b)//输出为undefined
//console.log(b.id)//执行会出错。
console.log(window.id);//输出为func,函数普通调用(不用new)时,内部的this指向window
var c = new func();//相当于把func当作一个构造函数执行,返回一个对象赋值给c。此时是可以调用c.id。函数体中的this指向函数执行后形成的上下文
console.log(c);//输出为创建的对象,this指针指向函数执行上下文。
console.log(c.id);//出为func
var d = new func();
d.id="new func";
console.log(c.id);//输出为func
console.log(d.id);//输出为new func。每次new,得到独立的上下文。
</script>