在javascript方法中声明一个变量似乎将其范围限定在window-object上,有什么方法可以改变这种行为吗?
var mf = new Array();
mf.init = function () {
oldIh = 10;
this.oldIh = 20;
alert(oldIh); //outputs 10, would prefer 20...
alert(window.oldIh); //outputs 10.
}
答案 0 :(得分:1)
基于注释,如果您要从外部访问内部this.oldIh
,只需使用其函数变量,例如
堆栈片段
var mf = new Array();
mf.init = function () {
oldIh = 10;
this.oldIh = 20;
}
mf.init();
console.log(oldIh)
console.log(mf.oldIh)
如果您要使用箭头函数,则this
在这种情况下将引用全局范围并更改值,并且可以在不使用函数变量的情况下进行访问。
堆栈片段
var mf = new Array();
mf.init = () => {
oldIh = 10;
this.oldIh = 20;
}
mf.init();
console.log(oldIh)
答案 1 :(得分:0)
添加var
或let
var mf = new Array();
mf.init = function () {
let oldIh = 10;
this.oldIh = 20;
alert(oldIh); //outputs 10
alert(window.oldIh); //outputs undefined
}
mf.init();
答案 2 :(得分:-1)
这很令人困惑。
1)不允许使用 var 声明 this.varaibleName
2)在方法内部使用 var 定义仅用于方法的变量。
3)不使用 var 或 this 都不会创建窗口变量(严格模式下不允许)
4)解决方案是使用不带 var 的 this.variableName ,即使在严格模式下也可以。
@Bean
public RouterFunction<?> userRouter() {
return
RouterFunctions.nest(RequestPredicates.path("/api/user/"),
RouterFunctions.nest(RequestPredicates.accept(MediaType.APPLICATION_JSON),
RouterFunctions.route(RequestPredicates.POST("/register"), userHandler::register))
);
}
@PostMapping(path = "/register")
public Mono<EntitySom> register(@RequestBody OwnObject object) {
return MOno....;
}
感谢大家为该主题做出贡献。