這裏的問題是,你不換一個函數內部代碼。
如果使用IIFE(立即調用函數表達式),則相同的代碼將起作用。
你的代碼失敗的原因是你不能在同一個作用域中聲明一個常量,如果已經使用了常量/變量名。
您可能已經使用var
而不是const
,但將分配給window.location
,有效地重新加載頁面並帶您進入404頁面,因爲該URL不存在。
這就是爲什麼你應該總是寫你的代碼在一個IIFE,以防止全球名稱空間污染和難以修復的討厭的錯誤。
下面是相同的代碼與IIFE(加嚴格模式):
(() => { // ES2015 IIFE
"use strict";
const companies = [
{ name: 'Google', location: 'Mountain View' },
{ name: 'Facebook', location: 'Menlo Park' },
{ name: 'Uber', location: 'San Francisco' }
];
const [{ location }] = companies;
console.log(location);
})();
或者更好的是:
{ // ES2015 block
"use strict";
const companies = [
{ name: 'Google', location: 'Mountain View' },
{ name: 'Facebook', location: 'Menlo Park' },
{ name: 'Uber', location: 'San Francisco' }
];
const [{ location }] = companies;
console.log(location);
};
釷E使用ES2015塊不會污染全球範圍內,因爲你將只使用let
和const
(而不是使用var
)
此外,永遠記住,不是所有的瀏覽器都支持ES2015還沒有語法,所以目前代碼必須使用Babel JS或類似工具進行傳輸。
我澄清了一句:「你不能重新定義全局變量X」,一般只適用於在同一範圍內的常數。你可以寫更多'var'相同的聲明,雖然 – Zorgatone
我不明白你的意思。我說的是什麼問題,以及哪些代碼會給你提供那個錯誤? OP在「位置」變量而不是「公司」變量方面存在問題 – Zorgatone
好吧,我看到您添加了代碼。讓我先讀它 – Zorgatone