直接上代码
function test () { } document.write(typeof test() + "<br />") document.write(typeof new test() + "<br />")
输出结果
undefined
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