我对TypeScript很陌生,我会尝试通过它来学习JavaScript。 由于我是一名.NET程序员,我可以在TypeScript中创建类,然后让TypeScript编译器神奇地将它转换为JavaScript,毕竟我想使用JavaScript生成的文件。这将有助于我学习JavaScript。
现在,我是一个简单的类,用于对方法参数执行验证。 打字稿实现如下:
class Guard {
static ThrowIfNull(argument, argumentName) {
if (argument == null) { throw "The argument '" + argumentName + "' cannot be null."; }
}
}
在TypeScript游乐场上,这会生成以下JavaScript:
var Guard = (function () {
function Guard() {
}
Guard.ThrowIfNull = function (argument, argumentName) {
if (argument == null) {
throw "The argument '" + argumentName + "' cannot be null.";
}
};
return Guard;
})();
所以,现在我确实希望在我的Web应用程序中使用这段JavaScript代码,而不是TypeScript代码。
我已经创建了一个jsFiddle,以便更容易理解。
现在,我已经在您的JavaScript中阅读过,您可以更好地将所有内容包装在function
中,如下所示:
(function() {
'use strict';
-- Code goes here.
})();
有关更新的代码,请参阅此JsFiddle。 但是,现在当我运行我的应用程序时,我得到了一个未定义的警告。' 有人可以向我解释为什么会这样吗?
我假设我必须删除(function()){})();然后,但这意味着我最初误解了这个概念,那么将所有内容包装在这样一个函数中的目的是什么?
修改 如果我删除了函数包装器,那么JShint会产生一个错误,告诉我应该使用'使用strict'的表单函数。
感谢您帮助我。
答案 0 :(得分:1)
var Guard = (function () {
"use strict";
function Guard() {
}
Guard.ThrowIfNull = function (argument, argumentName) {
if (argument == null) {
throw "The argument '" + argumentName + "' cannot be null.";
}
};
return Guard;
})();
对于你正在尝试做的事情已经足够了......进一步将其包装在
中(function () {
})();
将使Guard仅在该范围内可见 - 这不是您想要实现的目标
答案 1 :(得分:0)
如果代码块只有一个责任,你应该只将事物包装在一个函数中,并且你将一次又一次地将它用于特定目的。例如,隐藏/显示DOM元素的函数。
function toggle(id){
$('#' + id).toggle();
}
您封装了隐藏/显示功能,因为您可能需要这样的通用函数来处理任何DOM元素。
如果您只想运行一些说明,则应将它们写在脚本标记内:
<script type="text/javascript">
var lang = 'en';
doThis();
doThat();
var Guard = function () {
//////
};
</script>
如果你在函数内部编写所有内容,那么你会遇到很多问题。特别是关于可变范围,就像你现在一样。请阅读:What is the scope of variables in JavaScript?