2015-01-24 3 views
-1

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

function anonymous() 
{ 
    return(function() 
      { 
       'use strict'; 
       return !this&&!!Function.prototype.bind; 
      } 
    ()); 
} 
+1

Вид невежественного возвращения честно. Вы можете буквально забрать IIFE и просто использовать что-то внутри IIFE. Также первая функция не является анонимной функцией, анонимная функция - это «var a = function() {};», как вы видите, нет имени после функции, что делает ее анонимной. Это именованная функция под названием «anonymous» – EasyBB

+0

Это поможет, если вы описали, какую именно реакцию вы получаете от разных браузеров, и что вы ожидаете от кода. – JJJ

ответ

4

Это на самом деле не так уж плохо вопрос, то 'use strict'; указывает на то, что код внутри функции должны быть оценены в строгом режиме, который является частью ECMAScript5.

С включенным строгим режимом вы не можете использовать необъявленные переменные, что важно здесь. Если ваш браузер способен ECMAScript5, то переменная this не объявлена ​​i.e undefined. Если ваш браузер не поддерживает ECMAScript5 this, как правило, Window.

Так что это проверка совместимости, поддерживает ли ваш браузер ECMAScript5 или нет:

'use strict'; 
var hasECMAScript5 = !this; 

Тогда имеет экспрессирующие !!Function.prototype.bind проверяет, является ли ваш браузер поддерживает связанные функции (см https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).

2

Он проверяет, поддерживает ли браузер как strict mode, так и bind.

Он использует IIFE, потому что значение this зависит от того, как вызывается функция. Используя новую функцию, вы гарантируете, что контекст, в котором он вызван, будет.

Смежные вопросы