2016-11-02 3 views
0

Я ссылаюсь на несколько файлов JS в одном HTML-файле. Я знаю, что не должно быть перекрытия имен переменных и функций в этих JS-файлах. Однако ограничивается ли только глобальными переменными или всеми переменными (даже локальные переменные внутри функции)?Использование нескольких JS-файлов - перекрытие переменных/функций.

+0

Только переменные _ в том же объеме_. Файлы JS будут делиться только глобальной областью, поэтому вам нужно быть осторожным. – vlaz

+0

В соответствии с ответом tmslnz, если вы завершаете свои скрипты в '(function() {'use strict';/* script * /})();' тогда вы не можете случайно вывести что-либо в глобальную область. Только явно заданные свойства объекта 'window' будут глобальными –

+0

Хорошая точка @WilliamB, но будьте осторожны с' strict', потому что вещи становятся довольно _strict_ и иногда запутываются :) – tmslnz

ответ

1

// These will go into global scope 
 

 
nonKeywordedVarA = true; // just don't 
 

 
var nonKeywordedVarC = true; 
 

 
function leaky() { 
 
    nonKeywordedVarB = true; 
 
} 
 

 
// These will stay where you put them 
 

 
function nonLeakyA() { 
 
    var functionScoped = true; 
 
} 
 

 
function nonLeakyB() { 
 
    var functionScoped = false; 
 
} 
 

 
if (true) { 
 
    let blockScoped = true; 
 
} 
 

 
if (true) { 
 
    let blockScoped = false; 
 
} 
 

 

 
leaky(); 
 
nonLeakyA(); 
 
nonLeakyB(); 
 

 
// Here we log global scope 
 
console.log(typeof nonKeywordedVarA) 
 
console.log(typeof nonKeywordedVarB) 
 
console.log(typeof nonKeywordedVarC) 
 
console.log(typeof functionScoped) 
 
console.log(typeof blockScoped)

Она ограничена только к переменным в том же объеме:

  1. переменные, объявленные без var, let, const ключевых слов (например, someVar = истина). Они идут просочиться прямо в глобальную область видимости (например window объекта)

  2. переменные, объявленные вне любой области видимости функции (или блокировать сферу в случае let)

Короче, ответ на ваш вопрос не беспокоиться об переменных с тем же именем в разных областей.

+0

В настоящее время моя тестовая среда недоступна из-за обслуживания. Проверите это и ответьте как можно скорее. Большое спасибо за ваш ответ! –