我一直认为这些回调有自己的范围。这是怎么回事?
Eton_file_sync.prototype.add_file_listener = function(filename){
//use chokidar to make a watcher for the filename
var watcher = this.chokidar.watch(filename, {
ignored: /[\/\\]\./,
persistent: true
});
var some_variable = 1;
watcher.on('change', function(path) {
console.log ('File', path, 'has been changed');
console.log (some_variable);
});
};
通过更改文件来调用它时,为什么some_variable的输出实际上有效?
File buffercont.asc has been changed
1
答案 0 :(得分:1)
他们有自己的范围。如果从事件处理程序回调中定义该变量的值,则只需定义该范围内的值,但不会影响父范围。
var some_variable = 1;
console.log(some_variable); // prints "1"
var callback = function() {
var some_variable = 5;
console.log (some_variable); // prints "5"
};
callback();
console.log(some_variable); // prints "1"
请注意,在上面的示例中,定义函数内部的变量并未在函数外部更改它。每个函数都带有一个范围链,与其创建的范围链相同。您可以随时访问链中较高的变量,除非它们已经在链中被进一步覆盖,如上例所示。