Javascript '的值;这';函数内部

Javascript '的值;这';函数内部,javascript,jquery,Javascript,Jquery,我有一个计划: $(document).ready(function() { this.name = "John"; var someFunc = function() { return this.name; } }); 根据我的理解,someFunc中的“this”的值是“window”,因为它不包含在任何对象中 我的问题是为什么“this”的值是“HtmlDocument”在$(document).ready(function(){alert(this)

我有一个计划:

$(document).ready(function() {

   this.name = "John";
   var someFunc = function()
   {
     return this.name;
   }
});
根据我的理解,
someFunc
中的“this”的值是“window”,因为它不包含在任何对象中

我的问题是为什么“
this
”的值是“
HtmlDocument
”在
$(document).ready(function(){alert(this)}

既然
someFunc
$(document)下,ready
函数为什么它的值不能是'
HtmlDocument

在不同的情况下,到底是什么在幕后发生,导致这个值不同?

变量
this
在JavaScript中有一个作用域的概念,它的值取决于访问它的位置,我将尝试用一个示例来解释这一点,请参见以下代码片段:

$(“#文档”).ready(函数(){
log(“此处“this”引用其所有者对象“HTMLDocument”);
console.log(this.toString());
jsFunction();
$(“#测试”).jqueryFunction();
log(“您可以在窗口:”)上调用jsFunction;
jsFunction();
log(“但不能在窗口上调用jqueryFunction:”;
试一试{
jqueryFunction();
}catch(err){console.log(“error”);}
log(“您都不能在\“div test\”:)上调用jsFunction;
试一试{
$(“#测试”).jsFunction();
}catch(err){console.log(“error”);}
//内部功能
log(“同样的事情也适用于内部函数”);
var innerFunc=函数(){
console.log(this.toString());
var moreInnerFunc=函数(){
console.log(this.toString());
}
moreInnerFunc();
}
innerFunc();
(功能(){
log(“立即调用的函数表达式(IIFE)”;
console.log(this.toString());
})();
var extDeclared=externallyDeclared;
extDeclared();
$(“#文档”).extDeclared();
});
函数jsFunction(){
log(“此处“this”引用其所有者\“window\”);
console.log(this.toString());
}
(函数($){
$.fn.jqueryFunction=函数(){
log(“此处“this”引用其所有者\“div test\”);
log($(this.prop(“id”));
}; 
})(jQuery);
函数外部声明(){
log(“外部声明的可能是window或其其他所有者”);
console.log(this.toString());
}
(函数($){
$.fn.extDeclared=externallyDeclared;
})(jQuery);


this的值由调用函数的方式决定。如果在没有任何上下文的情况下调用方法,
this
指的是窗口。要回答第一个问题,在jQuery中,处理程序/回调函数中的
this
上下文指的是调用方法的元素,因此
文档
持有e> 此Read>()例如,有关java脚本中“this”的简短概述: