Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   конструкция (0,eval) (https://javascript.ru/forum/misc/42022-konstrukciya-0-eval.html)

skrudjmakdak 09.10.2013 16:08

конструкция (0,eval)
 
Собственно вопрос в названии. Вот увидел в одной либе(tod.js) такую конструкцию: (0,eval)('this'). И у меня сразу такой вопрос, как это понимать? первый раз вижу..

я так понял (0,eval) - это функция, а ('this') - параметры вызываемой\вызванной функции..

но как понять именно (0,eval) ???

devote 09.10.2013 16:10

Цитата:

Сообщение от skrudjmakdak
но как понять именно (0,eval) ???

никак, это просто конструкция сбивающая с толку... Наверно сделано для запутывания специально.

skrudjmakdak 09.10.2013 16:13

угу, понятно.. удалю нафиг, чеб не мешалась :)

Яростный Меч 09.10.2013 16:18

тут использована малоизвестная операция ","
т.е. выражение (a,b,c,....,z) возвращает значение z - последнего элемента в наборе.
в данном случае вернулось eval - функция, которая и вызвалась для 'this', вернув значение this.
вывод: (0,eval)('this') можно заменить на this

skrudjmakdak 09.10.2013 16:23

Яростный Меч, а польза от такой операции, если и так известно что будет возвращен последний элемент?

Define 19.11.2013 11:04

Цитата:

Сообщение от skrudjmakdak (Сообщение 275628)
Яростный Меч, а польза от такой операции, если и так известно что будет возвращен последний элемент?

Читайте тут.
http://stackoverflow.com/questions/1...20023#14120023

animhotep 19.11.2013 12:06

эх, костыли то какие(

Define 20.11.2013 10:37

Цитата:

Сообщение от animhotep (Сообщение 281792)
эх, костыли то какие(

Как прокомментировал автор knockoutjs - "это надежный способ получить ссылку на глобальный объект"
var window = this || (0, eval)('this');

так что думать вам использовать это или нет)

Define 20.11.2013 10:39

Вот еще пример:
(function(undefined){
        var window = this || (0, eval)('this'),
            document = window['document'],
            navigator = window['navigator'],
            jQuery = window["jQuery"],
            JSON = window["JSON"];
            // ...

Maxmaxmaximus3 20.11.2013 18:29

Цитата:

Сообщение от Яростный Меч
тут использована малоизвестная операция ","
т.е. выражение (a,b,c,....,z) возвращает значение z - последнего элемента в наборе.
в данном случае вернулось eval - функция, которая и вызвалась для 'this', вернув значение this.
вывод: (0,eval)('this') можно заменить на this

ну это он я думаю и так понял, он не понял зачем)

Цитата:

Сообщение от Define
"это надежный способ получить ссылку на глобальный объект"

а я вот так получаю, и это быстрее чем ивал, но это не важно)
(function(){return this}())

^______^

к слову, некоторые еще undefined пот так получают
(void 0)

devote 20.11.2013 18:36

Цитата:

Сообщение от Maxmaxmaximus3
а я вот так получаю, и это быстрее чем ивал, но это не важно)
(function(){return this}())

нуну, ты забыл про strict:
"use strict";
alert(function(){return this}());

без strict:
alert(function(){return this}());


Часовой пояс GMT +3, время: 21:06.