Каков контекст анонимной функции?

У меня есть такой код:

function demo() {
    this.val=5;
    function() {
        this.val=7;
    }();
}

Теперь, когда я даю выполнить этот код в консоли Firefox или Chrome, он выдает синтаксическую ошибку. Я не понимаю, почему это ошибка, потому что я читал, что функции javascript являются объектами, поэтому, когда я вызываю анонимную функцию, внутри нее это указывает на демонстрацию функции и должно изменить val на 7 ,поэтому, если я делаю

var x=new demo();
x.val;   //should give 7

, но когда я делаю это

function demo() {
    this.val=5;
    var f=function() {
            this.val=7;
    }();
}
window.val;    // gives 7

, я не понимаю, являются ли функции объектами, тогда почему this в анонимной функции указывает на окно , а не демо . Пожалуйста, объясните это.

6
задан Brian Tompsett - 汤莱恩 13 June 2015 в 14:32
поделиться