Comments 28
Где ещё почитать про синтаксис javascript;version=1.7 и область его применимости в браузерах?
В FF3.6 заработал, а где ещё такая странная запись будет работать и каковы перспективы для неё?
Впрочем, там работает и
, что тоже не обычно. С какой это версии JS пошло и почему так не пишут, а обычно f = function(x){return x*x;}?
В FF3.6 заработал, а где ещё такая странная запись будет работать и каковы перспективы для неё?
Впрочем, там работает и
, что тоже не обычно. С какой это версии JS пошло и почему так не пишут, а обычно f = function(x){return x*x;}?
0
[Съедены теги:]
В FF3.6 заработал
Впрочем, там работает и
В FF3.6 заработал
<script type="application/javascript;version=1.7">let(f = function(x)(x*x))alert(f(4));</script>
, а где ещё такая странная запись будет работать и каковы перспективы для неё?Впрочем, там работает и
<script>
f = function(x)(x*x);
alert(f(4))
</script>
, что тоже не обычно. С какой это версии JS пошло и почему так не пишут, а обычно f = function(x){return x*x;}? 0
Такая запись функций пошла с 1,7 версии.
Не пишут так потому что 1)Не все знают 2)Internet Explorer
Основные перспективы использования let — это node.js
Почитать про JavaScript можно на MDC
Где работает с уверенностью сказать не могу но насколько я знаю IE8+, Chrome,FireFox (версии не указал так как пользователи этих браузеров обычно обновляют его) поддерживают 1.7 версию.
Не пишут так потому что 1)Не все знают 2)Internet Explorer
Основные перспективы использования let — это node.js
Почитать про JavaScript можно на MDC
Где работает с уверенностью сказать не могу но насколько я знаю IE8+, Chrome,FireFox (версии не указал так как пользователи этих браузеров обычно обновляют его) поддерживают 1.7 версию.
0
Нет, кроме лисы ни один популярный браузер не поддерживает.
+3
В node.js let, array comprehensions и closure expression у меня не заработали =( Есть способ запустить?
-1
В V8 нет let и поэтому его нет в Node.js
let is a Mozilla extension, not part of any standardАналогично с E4X (хотя он в стандарте)
There are currently no plans for implementing E4X in V8Comparison_of_layout_engines_(ECMAScript)
+2
Javascript — это имплементация стандарта ECMAscript корпорацией Mozilla. Следовательно, в других браузерах (вообще ни в одном, базирующемся на Webkit, Presto, Trident) поддержки let нету. Я как-то заводил баг в багтрекере V8 — там мне сказали то же самое «извините, но новые фичи не включим, пока они не будут в ecmascript».
Ответвление Javascript, поддерживаемое мозиллой добавляет еще такие фичи:
— Короткие анонимные функции
Было: function(x) {return x * x}
Стало: function(x) x * x
— Генераторы, итераторы (__iterator__, next()) и, следовательно, yield statement, как в пытоне
— Списочные выражения (тоже из пытона)
— Destructing assignment
Ответвление Javascript, поддерживаемое мозиллой добавляет еще такие фичи:
— Короткие анонимные функции
Было: function(x) {return x * x}
Стало: function(x) x * x
— Генераторы, итераторы (__iterator__, next()) и, следовательно, yield statement, как в пытоне
function fib() { // js 1.7
var i = 0, j = 1;
while (true) {
yield i;
var t = i;
i = j;
j += t;
}
}
handleResults( i for ( i in obj ) if ( i > 3 ) ); // js 1.8
— Списочные выражения (тоже из пытона)
var ten_squares = [i * i for each (i in range(0, 10))];
var evens = [i for each (i in range(0, 21)) if (i % 2 == 0)];
— Destructing assignment
var a = 1;
var b = 3;
[a, b] = [b, a];
function f() {
return [1, 2];
}
var c, d = f();
+8
Ну тогда я пожалуй напишу компилятор данного подмножества JS в JS для V8, Preso,…
0
Маленькая поправочка, Webkit, Presto, Trident — это движки, которые рендерят НТМЛ. За джаваскрипт отвечает JS движок.
Еще я бы добавил к вашему списку такую вещь:
Object.__noSuchMethod__ — вызывается, если метод не существует. Ну вот почему именно этой фичи нет в V8, когда она так мне нужна в node.js -_-
Еще я бы добавил к вашему списку такую вещь:
Object.__noSuchMethod__ — вызывается, если метод не существует. Ну вот почему именно этой фичи нет в V8, когда она так мне нужна в node.js -_-
0
Собственно, js-движки в браузерах:
en.wikipedia.org/wiki/List_of_ECMAScript_engines
en.wikipedia.org/wiki/List_of_ECMAScript_engines
+2
Ссылка на работающий пример в вашей статье смотрелась бы как нельзя кстати.
0
Последний пример, скорее всего, с ошибкой. В том же FF сравните:
и
<script type="application/javascript;version=1.7">
let f = 1
{alert(f);} //вывод 1
alert(f); //вывод 1
</script>
и
<script type="application/javascript;version=1.7">
let(f = 1)
{alert(f);} //вывод 1
alert(f); //ошибка "f is not defined"
</script>
0
Поясните пожалуйста в чем ошибка. Так как пробовал все из веб консоли FF 4.0 Beta 10 и все работало как я расписал.
0
Ограничение видимости работает именно во 2-м моём примере, когда после let — скобки. В первом случае оператор let, скорее всего, просто игнорируется. Ещё пример:
Поэтому Ваш пример
не сработает по ограничению видимости.
<script type="application/javascript;version=1.7">
let(f = 1)
alert(window.f); //undefined - правильно
alert(f); //ошибка "f is not defined" - тоже правильно
</script>
Поэтому Ваш пример
let i=100
{
не сработает по ограничению видимости.
0
Т.е работать, конечно, будет, но i==100 останется и после фигурных скобок после блока.
0
Оно так и задумано.
0
А какое тогда отличие от просто
? Даже область видимости переменной i в этом случае — windows.
i=100
{
? Даже область видимости переменной i в этом случае — windows.
0
Вот именно что отличий нет, в том примере внешняя область видимости для кода в блоке не важна. Важно то что когда мы определяем внутри let i = i *i то сначала i становится undefined во внутренней области.
а в let m = i * i мы определяем m а затем присваиваем m значения в результате умножения i*i из внешней области видимости.
а в let m = i * i мы определяем m а затем присваиваем m значения в результате умножения i*i из внешней области видимости.
0
Потому что в JavaScript областью видимости управляет только функция.
Последний пример должен выглядеть так:
let i=100;
(function(){
let i = i * i;
Bob.say(i);
})();
Последний пример должен выглядеть так:
let i=100;
(function(){
let i = i * i;
Bob.say(i);
})();
-1
если правильно понял, то в первом примере вместо
должно быть
Bob.postmessage("300$",event.origin)
должно быть
Bob.postmessage(price+"$",event.origin)
0
а поямните первый пример
в эту функцию вы прайс не передаете?
Bob.buy('dream plug');
т.е. эта фунция работает с глобальным объектом прайс
то есть получается что let на время переопределяет глобальную переменную?
в эту функцию вы прайс не передаете?
Bob.buy('dream plug');
т.е. эта фунция работает с глобальным объектом прайс
то есть получается что let на время переопределяет глобальную переменную?
+1
Устарело. Теперь es6
0
Sign up to leave a comment.
Блокировка видимости с помощью Let в JavaScript