Вы должны быть осторожны со вторым примером, ключевое слово this
будет ссылаться на объект Global, если вы вызываете функцию без оператора new
, и, посмотрев на свое возвращаемое значение, кажется, что вы не пытаются сделать constructor function.
Я думаю, что вам нужно знать, как this
ключевого слова (контекст функции) работает:
this
ключевое слово неявно набор, когда:
1- Когда функция вызывается как метод (функция вызывается в качестве члена объекта):
obj.method(); // 'this' inside method will refer to obj
2- нормальный вызов функции:
myFunction(); // 'this' inside the function will refer to the Global object
// or
(function() {})();
3- Когда оператор new
используется:
var obj = new MyObj(); // this will refer to a newly created object.
И вы также можете установить this
ключевое слово явно, с методами call
и apply
:
function test() {
alert(this);
}
test.call("Hello world"); // alerts 'Hello world'
Теперь, разница между функцией b
двух ваших примеров - это в основном то, что в первом фрагменте, b
- это объявление функции , в вашем втором примере b
- это выражение функции .
Объявление функции подчиняется hoisting, и они вычисляются во время разбора, в выражениях функций определяются во время выполнения.
Если вы хотите более подробную информацию о различиях между декларациями функций и функциональных выражений, я оставляю вам некоторые ресурсы:
И BTW, вам не нужно semicolon after function declarations.