javascript这个关键字在下面的代码中是如何工作的

javascript这个关键字在下面的代码中是如何工作的,javascript,Javascript,我们无法更改以下代码: var t = 10; function test(){ var t = 20; alert(this.t); } 我们必须更改或添加以下内容 test() 上述函数调用执行10 我需要在函数测试中定义的“20”。因为您不能更改函数,所以您可以这样做 test = test.bind({t: 20}); test(); 或者在一行中 test.bind({t: 20})(); 看起来您需要了解JS如何解析名称(即通过范围扫描),以及如何绑定this关键字,

我们无法更改以下代码:

var t = 10;

function test(){
  var t = 20;
  alert(this.t);
}
我们必须更改或添加以下内容

test()

上述函数调用执行10


我需要在函数测试中定义的“20”。

因为您不能更改函数,所以您可以这样做

test = test.bind({t: 20});
test();
或者在一行中

test.bind({t: 20})();

看起来您需要了解JS如何解析名称(即通过范围扫描),以及如何绑定
this
关键字,并链接到其他资源,这些资源将详细介绍几个方面

其长短不一之处在于,您的函数应该如下所示:

function f ()
{
    var t = 20;
    alert(t);//console.log would be better, though
}
就目前的代码而言,您无法获得
var
值。您必须更改一些代码,或者更改调用函数的方式:

var obj = {t: 20, test: test};//test is the function name:
obj.test();//this.t will reference obj.t now
阅读链接的答案,了解其原因和工作原理

您可以这样做:

test.call({t:20});
alert(20);
如果调用
test()
它将作为一个函数,而
这将是一个全局对象(窗口)。如果添加
new
关键字(
newtest();
),则它将是一个对象,
将引用该对象。但您还需要将t存储在以下位置:

function test(){
  this.t = 20;
  alert(this.t);
}

new test();
或者您可以将其存储在var中,并使用该var访问它:

function test(){
  var t = 20;
  alert(t);
}

test();
您可以这样做:

test.call({t:20});
alert(20);

说真的,你可能误解了老师的指示。

然后,使用
this.t=20。这是一个难题还是一个真正的实际问题?@dystroy抱歉,这是给我的一个挑战。这是你的家庭作业吗?谢谢jcubic和所有其他答案和讨论。在这个场景中,关于这个关键词的描述非常简短。你没有阅读问题的第一行,是吗?@dystroy你是对的。我们不能改变内部功能。测试函数是否有对象初始化或其他内容?@dystroy好吧,在看到你的第一条评论后,我不得不想了一会儿。但我相信我们的答案有不同的影响。我的第一个版本绑定了这个对象。因此,下一次他不必传递对象:)我的原始答案与之类似,但问题的第一行内容是
我们无法更改以下代码:
:)@user3350129这是有效的问题。答案是你不能得到
var t=20
使用
这个.t它是不同的变量。这就像访问
var x
y
一样。感谢jcubic和所有其他回答和讨论。非常简短。