【发布时间】:2016-02-12 17:26:16
【问题描述】:
我一直在探索 JavaScript 的范围。消息来源指出,范围是函数分隔的,而不是大多数语言中的块分隔。
我在我正在编写的一些代码中添加了一些显示代码,因为我的一些函数内函数不清楚(对我来说),我想看看这些范围是如何工作的。
令人惊讶的是,在 $.getJSON 函数中的 $.each 函数中,if(){} 子句显然被视为一个函数。我会假设它是一个块。
function displayInfo(nKey) {
if(!nKey) var nKey = 0;
var objFilm = {};
var imgRef;
//iterate through all object properties; display their attributes
// Object.keys() returns an array of all property names
// for most entries, the object is ...film; check first for array of multiple films
jqxhr = $.getJSON('dbMovies.json', function(data) {
var xx = "xx";
$.each(data.disc, function(i, xdata) {
if(xdata.key == nKey) {
objFilm = xdata.film;
var yy = "yy";
imgRef = xdata.img;
return false;
}
console.log("in jqxhr, xx: " + typeof xx); //this shows
console.log("in jqxhr, yy: " + typeof yy); //this does NOT
}); // $.each
})
.done(function() {...}
如果 if(){} 是一个函数,那么什么是块?
【问题讨论】:
-
没有。这不是一个功能。如果它是一个函数。它可能有一个返回值。
var foo = if(...) {... }是一个明确的语法错误。这是一个关键字。请注意,您在 .each 中的if()实际上是在一个函数中:function(i,xdata) ... -
if不是函数。是什么让你认为它是一个函数? -
您可以在此处阅读语言规范中的声明:ecma-international.org/ecma-262/5.1/#sec-12 :)
-
谢谢。我现在明白了。
标签: javascript jquery scope