addChangedValue函数中的sampleViewModel实例不是未定义还是为null?

就实例而言,据我所知,不应在addChangedValue函数中知道sampleViewModel。

$(function(){

    var PersonViewModel = function() {
        var me = this;
        me.firstName = ko.observable('Lisa'),
        me.lastName = ko.observable('T'),
        me.changes = ko.observableArray()
    };

    var sampleViewModel = new PersonViewModel();

    sampleViewModel.firstName.subscribe(function(newValue) {
        addChangedValue("firstname refreshed: " + newValue);
    });

    function addChangedValue(updatedValue) {
        sampleViewModel.changes.push({ value: updatedValue });
    };

    ko.applyBindings(sampleViewModel, document.getElementById('data'));
});

最佳答案

当然可以。闭包在词法上绑定到其定义的范围,因此该闭包将知道在该范围内定义的所有内容(其中也定义了该闭包)。

同样,addChangedValue可以访问其封闭范围内的任何变量,除非您通过在该函数中定义一个名称相似的变量来对其进行隐藏。

10-02 10:50