鍍金池/ 問答/C++  HTML/ js中window對象前綴是不是都可以省略?

js中window對象前綴是不是都可以省略?

js中window對象前綴是不是都可以省略?
比如window.history.length 直接寫history.length好像也可以 還有open 是不是所有的window對象(如screen、location)及其方法、屬性都可以省略window前綴?還是說有什么限制?

回答
編輯回答
六扇門

clipboard.png

所以都可以省略這個window

凡是 window對象的屬性和方法都可以

window.alert()
window.history

2018年8月30日 11:41
編輯回答
不舍棄

瀉藥。

作用域問題, 下面來自《你不懂js》的作用域章節(jié)

function foo(a) {
    console.log( a + b );
}

var b = 2;

foo( 2 ); // 4
引擎:“嘿,foo 的 作用域,聽說過 b 嗎?我得到一個它的 RHS 引用?!?p>作用域:“沒有,從沒聽說過。問問別人吧?!?/p>

引擎:“嘿,foo 外面的 作用域,哦,你是全局 作用域,好吧,酷。聽說過 b 嗎?我得到一個它的 RHS 引用?!?/p>

作用域:“是的,當然有。給你?!?/p>

可以大概得出,在函數(shù)foo的作用域中并沒有b變量,所以會去外層(直到全局, 未找到則會報錯)尋找,而在瀏覽器中也就是會去window下尋找。如果使用window.alert,則表示alert存在于window作用域下, 這樣Js引擎直接就去window下獲取.

以上都是個人理解,可能會有偏差,還請指出
2017年9月18日 04:33
編輯回答
久舊酒

說下我的理解吧,可能不精準,僅供參考。
Window 對象表示瀏覽器中打開的窗口,那么滿足兩個條件,就可以省略:

  1. 在瀏覽器環(huán)境下
  2. 在頂級Frame下

那么在以上兩個條件的前提下,以下情況是無法省略window的:

  1. 在子Frame框架下,因為瀏覽器會為frame新創(chuàng)建一個子window對象
  2. 非瀏覽器環(huán)境下,比如Node
2018年3月3日 16:10
編輯回答
伐木累

這個就是個scope的問題,你如果在當前作用域中自己定義了history變量,那你用想要用全局的,就要加window. ;
如果沒有覆蓋,引擎查找的時候會一層一層往外找,直到找到為止;這些就是瀏覽器中內(nèi)置的一些變量;
可以想象成這樣

let a = 10;
function f(){
    let b = 20;
    function g(){
        console.log(a,b);  //跟在此處訪問a、b是一樣的道理
    }
}
2017年7月19日 17:13
編輯回答
吢涼
function getWindowName1(){
    ...
    var name = 'tom'
    ...
    console.log('name',name)//雖然從函數(shù)命名希望訪問window.name,但可能某段代碼讓你訪問到函數(shù)作用域內(nèi)的name,常見的是window.clear()
}
function getWindowName2 (){
    console.log('window.name',name)
}
getWindowName1();
getWindowName2();

不是所有的都能忽略
在真的項目里,在不同的作用域下,你不寫window誰知道會發(fā)生什么。(但同樣不是所有的都不能忽略,比如document/alert)

2017年9月10日 13:58