Ну, между ними нет большой разницы.
Обычно функция, прикрепленная к объекту, называется методом . Чтобы быть справедливым, глобальная функция привязана к глобальному объекту (окну), поэтому его можно рассматривать как метод глобального объекта (подумайте о alert
, который на самом деле window.alert
).
Не все функции прикреплены к объектам, вы можете иметь локальные функции так же, как и локальные переменные.
function f() {
var x = 12;
var log = function (value) { console.log(value); };
log(x);
}
Одно важное различие между ними будет значение this
, который является псевдо-параметр, передаваемый функции, когда они вызываются, независимо, если они являются методы или нет. Если функция связана с объектом, this
будет указывать на соответствующий объект при вызове с помощью синтаксиса метода:
var myObject = {
name: 'Joe',
myFunc: function() { console.log(this.name); }
};
myObject.myFunc(); // will receive myObject as this and therefore will print "Joe"
Тем не менее, «нормальная» функция будет либо получить глобальный объект (окно) или неопределенных, в зависимости от того, используете ли вы строгий режим или нет (по умолчанию вы этого не сделали, поэтому этот укажет на окно).
function f() { console.log(this.constructor); }
f(); // function Window()
Другой ответ о стоимости this
можно найти here (полное раскрытие информации: Я автор этого ответа, а)
Просто функция объекта имеет доступ к внутреннему состоянию объект. – mic4ael
Ну, это функция на объекте, другая функция не на объекте. Между ними нет фундаментальной разницы. Технически * каждая * единственная функция является функцией на * some * объекте. Пожалуйста, уточните, что вас путает. – deceze
Они оба находятся внутри объекта. One is 'window.funct' Другой -' window.a.funct' – Curt