如果变量a在console.log之后声明,它的值应该是未定义的
function x(){
b();
function b(){
console.log(a) //displays value of a
}
var a = "hello world"
}
x()
答案 0 :(得分:0)
这在Javascript中称为变量提升。您可以阅读更多内容here。基本上,JavaScript解释器“向前看”以查找所有变量声明并将它们“提升”到函数的顶部。为了方便起见,你可以将这种行为联系起来,因为解释器会扫描两次代码,而在第一次扫描时,它会提升变量。
PrivateFontCollection pfc = new PrivateFontCollection();
pfc.AddFontFile("Axixa.otf");
Font fnt = new Font(pfc.Families[0], 8, FontStyle.Regular);
button1.Font = fnt; // This code change font correctly
Bitmap bmp = new Bitmap("1.png");
RectangleF rectf = new RectangleF(0, 0, bmp.Width, bmp.Height);
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
StringFormat format = new StringFormat()
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
g.DrawString("123, 123", fnt, Brushes.Red, rectf, format);
g.Flush();
g.Save();
但如果它是一个自我调用,这将是未定义的。检查一下:
function x() {
function b() {
console.log('a: ', a); //displays value of a
}
var a = "hello world";
b();
}
x();
function x() {
(function b() {
console.log('a: ', a); //displays value of a
})()
var a = "hello world";
}
x();
并记录a
。
事情仍然是相同的:
undefined
答案 1 :(得分:0)
您的更新代码:
function x(){
b();
function b(){
console.log(a) //displays value of a
}
var a = "hello world"
}
x()
执行就像你写的那样:
function x(){
var a;
function b(){
console.log(a) //displays value of a
}
b();
a = "hello world";
}
x();
所以在调用b()
时,变量a
存在(否则你会得到一个未定义的引用错误,它将停止执行而不是仅仅记录{{1 }}),但尚未分配值。
现在更有意义了吗?