在这个问题之后,我真的很感兴趣,因为只需在String.prototype方法中添加"use strict"就可以将性能提高10倍。的很简短,没有给我解释。为什么在两个几乎相同的方法之间会有如此巨大的差异,只是顶部的"use strict"不同?你能更详细地解释一下这背后的理论吗?
String.prototype.count = function(char) {
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
当函数作为对象属性被调用时,this被设置为父对象。类似的规则适用于以构造函数或事件处理程序的身份调用函数,但在浏览了关于JS作用域的文章超过我所能计算的数量之后,并深入研究ECMA5.1规范,我无法准确地确定函数作为回调传递时是如何设置执行上下文的。
这段代码清楚地表明,作为回调传递给另一个方法的方法,即使在同一个对象中,也会恢复到全局执行上下文(无论是在浏览器中还是在Node.js中)。
var name = 'global';
var self = function() {
return this.name;
}
var cback = function(ff)
谷歌Chrome中出现了一些看起来很奇怪的事情:
> var f = [].reverse;
undefined
> f() == window;
true
在Node.js上,我得到了一个不同的结果:
> var f = [].reverse;
undefined
> f() == global;
TypeError: Array.prototype.reverse called on null or undefined
为什么会发生这种情况?这和范围有关吗?
我正在尝试理解"this“的"use strict";在下面的情况下修改的规则。
在读完()之后,我最好的猜测是,由于函数isStrictModeOn()并没有“附加”到任何东西上,所以这指的是null。这被认为是一种比Javascript更明智的选择,只需将this附加到全局对象。这是对“使用严格”在这种情况下所做的更改的正确解释吗?
function isStrictMode(){
return !this;
}
//returns false, since 'this' refers to global object and '
我经常使用来计算范围、函数调用站点以及所有这些,同时推进我的JS学习升级。最近我遇到了这样的情况:
function foo() {
console.log( this.a );
}
var a = 2;
function bar() {
var a = 5;
foo();
};
bar();
Google在我期待5(foo的呼叫站点)的时候,给了我一个2。有趣的是,pythong家教(当然是在JS下)给了我一个未定义的错误消息,如下所示:
我有两个问题:
为什么结果是2而不是5自,调用站点的foo是在酒吧,其中a是5。
为什么pytho
我认为我理解了JS中的这个机制,但是我不能解释为什么在JS类(语法类)的方法中定义和调用一个函数时,这个函数中的‘->’值是未定义的,而我期望它是window。 没有包含在代码片段中,但我尝试检查该方法的上下文是否在严格模式下执行,而不是。 我在js fiddle和我的chrome浏览器控制台上尝试了这段代码。 class ComponentClass {
classMethod() {
function funcInMethod() {
console.log('this in in the function funcInMethod
我尝试使用Scala.js为screep生成逻辑,但在尝试导入生成的javascript代码时遇到以下错误:
TypeError: Cannot read property 'Object' of undefined
at eval:1:358
at screeplogic:45:322
at m:4:3096
at console:45
at Object.c.runCode:4:6811
首先,我创建了一个基本的Scala.js项目:
然后,我将我的screep帐户链接到该repo,使用"generated“文件夹作为要导入游戏的链接文件夹。
为了得到这个错误,我
我一直试图在多个文件中使用单个JavaScript对象。为此,我在JavaScript中选择了单例设计模式。
mySingleton.js
var mySingleton = (function () {
var instance;
function init() {
function privateMethod(){
console.log( "I am private" );
}
var privateVariable = "Im also private";
var privateRandomNumber = Math.random();
ret
道格拉斯·克罗克福德教了我们很多关于js的知识。特别是有四种使用函数的方法
Function Application
function f() {}
f();
Method Invocation
var obj = {f: function (){}};
obj.f();
Apply Pattern
var obj = {};
function f(){}
f.apply(obj);
Constructor Call
function Person(){}
new Person();
我的问题是,在使用函数应
我知道有相当多类似于这个问题的问题,但我找不到任何问题来回答为什么,或者当从对象函数内部调用回调函数时,这个函数的上下文(值)会如何变化,如下所示
var obj = {
objproperty: "this is a property of obj",
func1: function(x,cb){
console.log(this) // refers to obj
var output_value = x + 20;
cb(
因此,我有一个从SQL数据库中获取数据的脚本,并试图为它构建一个JS包装器。我使用以下函数调用该脚本,并在DB准备就绪后立即使用它的信息。
var User = function() {
this.email = null;
//Async call to get user values
this.current(function(response) {
this.email = response.email;
//The value is assigned/usable at this point
});
};
User.
我正在处理一个JavaScript库,而我需要相应地加载不同的模块,我使用回调来加载不同的脚本:
只需在页面中添加main脚本:
<script type="text/javascript" src="main.js"></script>
main.js:
(function () {
var actionForT2 = function (fun) {
fun && fun.apply(this);
}
var loadCallback = function (name, obj)