2013-05-26 4 views
2

Я обнаружил различное поведение кода, когда функция вызывается/возвращается по-разному. Это довольно запутанно. Таким образом, чтобы очистить мои сомнения, я разделся весь код Minumum:Что возвращает функция JS

Рассмотрим простую функцию:

function f() 
{ 
    //some code 
} 

var objf = f(); 

Q1. Теперь objf не определено. Зачем? Что возвращает f()?

function f() 
{ 
    //some code 
    return this; 
} 

var objf = f(); 

Q2. Что возвращает f()? глобальный объект?

+1

Вы спрашиваете, как 'this' работает в JavaScript? –

+1

В первом случае это зависит от части «кода», не так ли? Если функция явно не возвращает ничего, ее возвращаемое значение не определено. – JJJ

+0

Нет, я достаточно читал «это»? : P Просто хочу знать, что здесь происходит, как задано в вопросах. Просто хочу понять, что я понимаю, и подытожить свое понимание этого. Я читал об этом слишком долго. – Mahesha999

ответ

3

Q1. Функции в javascript всегда возвращают значения. Значение по умолчанию: undefined, за исключением конструкторов, где возвращаемое по умолчанию значение равно this. Поскольку в вашем примере Q1 не указано значение возврата, интерпретатор возвращает значение по умолчанию, undefined.

Q2. this - это ключевое слово javascript, которое обновляется интерпретатором в зависимости от контекста приложения. В случае функции, которая не вызывается из объекта, как в вашем примере Q2, this будет ссылаться на глобальный объект.

How does the "this" keyword work?

+2

Я сам писал это, так как это было очень похоже на то, как Python работает с значениями 'return', в этом случае, если ни один из них не является он задает «Нет», поэтому это означает, что у них есть аналогичная философия в этом отношении :) +1 –

+2

В строгом режиме 'this' является' undefined', а также –

0

В первом случае objf действительно не определено. Поскольку функция ничего не возвращает, было бы разумно просто что-то придумать и вернуть это.

Во втором случае objf будет Window.

+0

Ohkay Я знаю, что 'objf' будет неопределенным, но почему? Я знаю, когда я использую 'new' для вызова функции, он возвращает' this', если я не возвращаю ничего явно. Является только потому, что я ничего не возвращаю и не использую ничего подобного 'new'? – Mahesha999

+0

Это не значит, что функция ничего не возвращает. Функция, которая не имеет явного возврата, имеет неявный 'return undefined;' – Alan

2

Когда вы делаете ...

function f() 
{ 
    //some code 
} 

var objf = f(); 

... вы получаете возвращаемое значение «F» функция, которая в данном случае является неопределенным, когда нет никаких " вернуть что-то ".

Если вы ...

function f() 
{ 
    //some code 
} 

var objf = new f(); 

... вы будете Экземпляр новый объект, основанный на "F" прототип функции. Ваша переменная objf получит новую ссылку на объект, даже если ваша функция «f» пуста.

И делает это ...

function f() 
{ 
    //some code 
    return this; 
} 

var objf = f(); 

... «это», в вашем случае, будет глобальный объект, это объект окна для браузеров. это keywork является ссылкой на объект, к которому эта функция связана, посмотрите на это:

someobj = { 
    f:function(){ 
    return this; 
    } 
} 

var objf = someobj.f(); 

objf === someobj; //==>true!!! 
+0

и просто добавить, если мы положим 'return this;' внутри функции и называть его «новым», он все равно вернет новый объект, созданный на основе прототипа функции «f», верно? – Mahesha999

+0

@ Mahesha999 correct –

+0

Возвращаемое значение конструктора используется, если оно является объектом; иначе, 'this' возвращается из конструктора. –

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