2016-04-20 2 views
0

Просто чувствуйте себя в замешательстве о какой-то викторине.Two Confusing Javascript Quiz

Quiz Один

var x = 1; 
 
    if (function f(){}) { 
 
    x += typeof f; 
 
    } 
 
    alert(x);

Ответ:

Ответ на х "1undefined"

Путаница:

Что на самом деле произошло с функцией f() {} "в условии if?

Quiz Два

(function(x){ 
 
    delete x; 
 
    return x; 
 
    })(1);

Ответ:

Выход 1.

Путаница:

Почему удаление не работает? Когда «удаляет» работу, а когда нет?

ответ

3

Точка путаницы на # 1 заключается в том, что функция выполняется как выражение функции. Функция действительна (поэтому она передает оператор if как правдивый), но это не оператор функции, поэтому для него не создается внешняя ссылка f.

Это та же концепция, что и при назначении функции переменной: вы создаете выражение функции.

var g = function(){}; 

Именование выражение функции не меняет, что:

var g = function f(){}; 
// it would still only be externally accessible as g, not f 

Было бы только доступным, как f внутри функции:

var g = function f(){ alert(f); }; 
g(); // will call the function, and from inside f will work 

Чтобы f как функция (вместо выражения) он должен быть определен сам по себе в пределах его текущего объема, например:

function f() {} 
// now we can reference it as f externally as a statement! 

даже только один символ в пути, и это становится выражением вместо ...

!function f() {} 
// now we can't :(

Для # 2, довольно просто: удалить для свойства объекта. Такие как:

var obj = {}; 
obj.foo = 'bar'; 
delete obj.foo; 
alert(obj.hasOwnProperty('foo')); // <- false 
+0

Большое спасибо за эту полезную информацию! – Kelvin

5

Как и любая функция, вы только что присоединились к номеру 1 со строкой 'undefined'. А во втором, delete работает только с объектными свойствами.

+0

Спасибо за объяснение в функции boolean value и delete keyword – Kelvin

0

f не эквивалентен f(), вы используете typeof для неопределенной переменной, которая возвращает строку undefined, которую вы добавляете к x.

Как и в предыдущем ответе. Удалить удаляет свойства объекта, не очищает и не уничтожает переменные.