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
可以访问其封闭范围内的任何变量,除非您通过在该函数中定义一个名称相似的变量来对其进行隐藏。