自從發佈以來,它允許我遵循更嚴格的命名約定。但是,讓我們考慮下面的場景,這樣做有效還是哈克做這樣的事情?我很清楚第一個函數的作用域和另一個塊的作用域。使用var並讓相同名稱的變量?
var sample = 'sample';
function fooBar() {
let sample = 'This is a sample';
console.log(sample);
}
fooBar();
console.log(sample)
自從發佈以來,它允許我遵循更嚴格的命名約定。但是,讓我們考慮下面的場景,這樣做有效還是哈克做這樣的事情?我很清楚第一個函數的作用域和另一個塊的作用域。使用var並讓相同名稱的變量?
var sample = 'sample';
function fooBar() {
let sample = 'This is a sample';
console.log(sample);
}
fooBar();
console.log(sample)
你正在嘗試做的,是完全合法的,並被稱爲陰影。顧名思義 - 您已隱藏全局範圍變量樣本與功能範圍變量樣本。通過這樣做,你已經限制自己訪問全局變量而不使用某些特殊技巧。 您仍然可以訪問同名的全局變量的函數內部下方
var sample = 'sample';
function fooBar() {
var sample = 'This is a sample';
console.log(sample); // 'This is a sample'
console.log(window.sample); //Sample
//console.log(this.sample);//Sample. Works only in non strict mode
}
fooBar();
console.log(sample); // 'sample'
而且所給出的,如果有人說從不使用VAR那麼一點兒也不難一份聲明中做出。 var仍然有它的用處。您可以通過凱爾·辛普森看看這篇文章在這裏
https://davidwalsh.name/for-and-against-let
希望這是一些幫助。
快樂學習:) Vatsal
這是有效的。
而且因爲一個聲明的功能之外,另一種是內,你甚至可以用var
同時聲明:
var sample = 'sample';
function fooBar() {
var sample = 'This is a sample';
console.log(sample); // 'This is a sample'
}
fooBar();
console.log(sample); // 'sample'
當然它是有效的,就好像都與'var'聲明。隱藏全局是個好主意嗎?幾乎肯定不是。在這種情況下它們都具有功能範圍。 –
這不是一件怪事,它毫無意義。 1:不要使用全局狀態。 2:使用有意義的名字。 3:**從不**再次使用'var'。 – Amit
@Amit - 我很好奇#3。謹慎闡述? – enhzflep