鍍金池/ 問答/HTML5  HTML/ 說明下為什么this指向window?

說明下為什么this指向window?

能幫我解釋下為什么this指向window

function fn(){
    console.log(this)
};

原理

回答
編輯回答
骨殘心
  1. 在這個(gè)上下文(執(zhí)行環(huán)境)函數(shù)并沒有綁定到任何一個(gè)對象中,意味著 this 指向 window;
  2. 從作用域和調(diào)用鏈方面看就很好理解了,函數(shù) fn 的上一級就是全局, 這個(gè) this 指向全局;
  3. 如果是在嚴(yán)格模式下執(zhí)行的,而嚴(yán)格模式下該 this 指向 undefined。
2018年2月9日 06:51
編輯回答
毀憶

1.fn();

直接調(diào)用函數(shù),這種調(diào)用模式不管在哪聲明在哪個(gè)作用域調(diào)用,函數(shù)都是由window調(diào)用,所以this都指向window
var age = 38;
var obj = {
    age: 18,
    getAge:function () {
        console.log(this.age);// 18
        function foo(){
            console.log(this.age);// 38
        }
        foo();//直接調(diào)用,指向window
    }
}
obj.getAge(); //方法調(diào)用,指向調(diào)用它的對象

2.作為方法obj.fn(),這種模式指向調(diào)用該方法的對象

    var fn = function(){
       console.log(this.length);
    }
    var arr = [fn, 1, 2];
    arr[0](); // 打印3

3.構(gòu)造函數(shù)模式,this指向new出來的對象

    function Person(){
        console.log(this);
    }
    var p = new Person();

4.上下文模式 call() apply() bind()

this指向你傳遞的第一個(gè)參數(shù),沒有傳遞參數(shù)或者是null,undefined,this指向?yàn)閣indow
2017年8月1日 22:39
編輯回答
涼薄
2017年11月27日 15:33
編輯回答
終相守
2017年4月9日 21:36
編輯回答
櫻花霓

在你所給出的條件下,this不一定指向window

this的指向取決于fn(函數(shù))的調(diào)用方式,歸納而言,javascript中的函數(shù)調(diào)用方式有三種。
這里先聲明一個(gè)函數(shù)。

function fn(){
    console.log(this);
}

第一種,最常見,作為一個(gè)對象的屬性被調(diào)用,這時(shí)的this指向調(diào)用它的對象。

var obj = {
    go: fn
}

obj.go(); // this指向obj

fn(); //這種方式實(shí)際也是對象調(diào)用的方式 

// 瀏覽器環(huán)境下等價(jià)于 
window.fn(); // this 指向 window

// nodejs環(huán)境下等價(jià)于 
global.fn() // this 指向 global

第二種,new關(guān)鍵字的方式調(diào)用,this指向新創(chuàng)建的對象實(shí)例(該對象的__proto__指向fn.prototype),這種方式稍微復(fù)雜一點(diǎn),你可以查看一下參考文檔。

new fn();

第三種,call和apply的方式調(diào)用,this可以自己指定。

var obj2 = {
    name: 'segmentfault'
}
fn.call(obj2); // this指向obj2
2018年6月7日 07:25
編輯回答
青裙

this 是指 當(dāng)前引用函數(shù)的執(zhí)行環(huán)境指代對象

2017年12月10日 06:08
編輯回答
假灑脫

this對象在運(yùn)行的時(shí)候是基于函數(shù)執(zhí)行的環(huán)境綁定的:在全局環(huán)境中this等于window,而函數(shù)被作為某個(gè)對象的方法調(diào)用時(shí),this等于那個(gè)對象。

function fn(){
    alert(this)
};
fn();//相當(dāng)于window.fn(),this指向window
var obj = {};
obj.fn2 = fn;
obj.fn2();//this指向obj
2017年7月5日 17:27
編輯回答
痞性

兄弟你少了步調(diào)用的過程吧? 我們在寫的時(shí)候一般是簡寫,正規(guī)的寫法你比如 alert也是window的一個(gè)屬性,應(yīng)該寫成 window.alert 正如這個(gè)函數(shù) 這個(gè)函數(shù)在調(diào)用的時(shí)候就是 window.fn(), 只不過我們一般寫成了 fn()直接調(diào)用而已,也就是說是window調(diào)用的所以this指向window, 記住誰調(diào)用的this就指向誰 就ok了

2017年9月20日 19:12
編輯回答
懷中人

在js中,除了使用箭頭函數(shù)的寫法時(shí)this指向的是當(dāng)前函數(shù)執(zhí)行函數(shù)的格式化上下文,剩下的都是在函數(shù)執(zhí)行的過程中確定的。樓主提問的問題好像少了調(diào)用吧。
如果樓主想問的是這樣:
function fn(){

console.log(this)

};
fn()
那么實(shí)際上fn函數(shù)被調(diào)用的函數(shù)環(huán)境是全局的,也就是window環(huán)境。
在實(shí)際調(diào)用時(shí)候是window.fn()。所以此時(shí)指向的是window對象

2018年2月27日 14:38
編輯回答
做不到

這個(gè)屬于bom和dom內(nèi)容

一兩句說不清楚

我建議系統(tǒng)學(xué)習(xí)一下js基礎(chǔ)知識(BOM DOM ECMAScript)
https://pan.baidu.com/s/1hqwt0R6

2018年5月28日 07:18