直接上代码
function test () { }
document.write(typeof test() + "<br />")
document.write(typeof new test() + "<br />")
输出结果
undefined
object
undefined好理解,因为test函数没有返回值。
那new的时候为什么会返回object呢?其实当我们new一个方法的时候,可以理解为js帮我们做了某些操作,代码如下,注释的部分就相当于js帮我做的
function test () {
//var this = new Object();
//my code...
//return this;
}
每次使用new,意为创建一个新的空白对象
alert(test() === test()) //true
alert(new test() === new test()) //false
当然,在没有new就调用test方法的时候,并不表明其中就不能使用this,这时候的this,指向window,为了进一步证实这一点,代码如下:
window.name = "jack"
function fn () {
this.name = "rose";
}
fn();
document.write(window.name) //rose
捎带手的说下window,当我们在大环境下声明一个变量(全局变量),无论是否有var,其实是给window对象加了一个属性。
如果我们在其他函数内声明变量的时候不适用var,很可能就在无意间将其他的全局变量更改掉,下面的代码是个再常见不过的代码,说明了使用var的必要性。
var name = "window";
(function test(){
var name = "test";
document.write(name + "<br/>"); //test
})();
document.write(name + "<br/>"); //window