Задать вопрос
@den82721

Есть ли подобие global из php в js?

Можно ли в функции обратится к глобальной переменной(изменить её).В PHP это можно сделать с помощью написания GLOBAL перед переменной ,есть ли аналоги в js ?
  • Вопрос задан
  • 2948 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
VladimirZhid
@VladimirZhid
Нравится делать что-то интересное и полезное.
Если переменная объявлена через "var" то зона видимости этой переменной граниченна этой функцией. Если переменная объявленна вне какой-либо функции она, глобальна, для того чтобы объявить глобальную переменную из функции можно сделать так: window.some_var = "some value" эта запись аналогична var some_var = "some value" вне функции;
В es2015 появились операторы "let" и "const", но про них лучше прочитать где-нибудь вот здесь, иначе придется поднимать тему "подъема" переменных

//Объявленна глобальная переменная
var a = 1;
//самовызывающаяся функция
function(){
    var a = 2;
    //локальная переменная "a"
    console.log(a) // 2
    //глобальная переменная "а" 
    console.log(window.a) // 1
}()
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
В javascript область видимости строится на замыканиях (вложенности функций), есть три оператора объявления переменных:
var - переменная будет видна в текущей функции и во всех функциях объявленных внутри текущей функции, включая те, что объявлены внутри вложенных функций, данное объявление всплывает на начало функции не зависимо где в функции оно произведено
let - переменная будет видна в пределах текущего блока после ее объявления (не всплывает в отличии от var), а так же во всех вложенных в текущий блок блоках и функциях
Так же нужно отметить, что такое объявление произведенное в циклах создаст новую переменную на каждую итерацию цикла
const - все то же самое, что и для let + значение нельзя изменить
Важно отметить, что для объектов значением переменной является ссылка на объект, а не сам объект, то есть записать в такую переменную что-то еще нельзя, но состояние объекта менять можно

При обращении к переменной она сначала ищется в текущей области видимости, а если в текущей области такой переменной не объявлена, то производится поиск в области видимости выше.
Самой верхней областью видимости является глобальный объект, в нем поиск производится последним, если переменная не найдена и там, то будет возвращено значение undefined
Важно: в strict режиме (который рекомендуется включать всегда) нельзя использовать не объявленные переменные за исключением в операторе typeof

Многие среды исполнения js создают в глобальном объекте переменную содержащую ссылку на сам глобальный объект, например gui поток браузера создает несколько таких ссылок:
window - глобальный объект текущего фрейма (вкладка браузера, попап-окно, iframe)
top - глобальный объект самого верхнего фрейма (вкладки)
parent - глобальный объект фрейма находящегося на уровень выше, либо равносильно top если текущий фрейм - вкладка браузера или попап-окно
opener - глобальный объект фрейма, породившего текущую вкладку или попап-окно (может быть null, если текущая вкладка порождена самим браузером)

В webworker'ах и webextension'ах браузера ссылка на глобальный объект хранится в переменной self
В node.js - global

Универсальный способ получить глобальный объект в любой среде исполнения:
function getGlobal() {
  return (new Function('return this'))();
}


P.S. использование глобальной области видимости - дурной тон
Ответ написан
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
они и так доступны без дополнительных махинаций.

в гугле: область видимости {название языка}
Ответ написан
Комментировать
@holymotion
Все переменные в Js, объявленные вне функции являются свойствами глобального объекта (т.е. глобальными переменными)
var x = 0;
function exp() { x = 1; };
alert(x);
exp();
alert(x)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы