2017-02-15 3 views
-3

Интересно, является ли это безопасно использовать пусть в этом сценарии:Можно ли использовать let для переменной, которая возвращает результат?

function test() { 
    let result = 0; 
    result++; 
    return result; 
} 
+3

Почему именно это было бы безопасно? – Li357

+1

было бы небезопасно в браузере, который не понимает 'let' ... глядя на вас, Internet Exploder ... в противном случае это совершенно нормально –

+0

http://stackoverflow.com/questions/762011/ – david25272

ответ

2

Да, это совершенно безопасно, и это ожидаемый способ объявить локальную переменную, которую вы позже захотите вернуть в качестве значения функции. Поскольку Javascript является сборником мусора, локальная переменная может безопасно содержать любой тип значения. Это может быть простой примитив, как вы показываете, или он может даже содержать объект вроде этого:

function test() { 
 
    let result = {cnt: 0}; 
 
    result.cnt++; 
 
    return result; 
 
} 
 

 
let obj = test(); 
 
console.log(obj);  // shows {cnt: 1}

Это безопасно, потому что если вы возвращаете объект, который был объявлен в рамках функция и эта область функций выйдут из области действия, когда функция вернется, потому что Javascript - это язык, собранный с помощью мусора, объект будет жить отдельно, независимо от того, какое значение возвращает ваша функция за пределами области действия.

+0

Благодарим вас за ответ. Будет ли gc собирать его позже и заставить obj стать неопределенным? – longlifelearner

+0

@longlifelearner - GC только когда-нибудь очистит то, что больше не используется. Итак, если вы присвоили obj переменной, доступной по вашему коду, тогда она не будет GCed. Вот как работает GC. Он очищает вещи, которые больше не доступны никакому коду. Таким образом, он никогда не очистит то, что вы все еще используете. – jfriend00

0

Чтобы поросенок обратно на комментарии, размещенные выше.
Const - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const - отличный способ позволить себе, а также другим людям, читающим ваш код, знать, что «эта переменная не будет переназначена или изменена».

Let - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let позволяет людям узнать, что эта переменная, скорее всего, будет переназначена или изменена.

Использование let в вашем случае - все в порядке!