我想知道可以确定在销毁全局对象和atexitC++ 之间的顺序
我有一个全局对象和注册atexit函数如下:
static MyClass g_class;
void onExit()
{
// do some destruction
}
int main()
{
atexit(onExit);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我发现onExit()之前MyClass::~MyClass()在Visual Studio 2012和gcc4.7.2中调用过.我确定onExit在全局对象(如g_class)销毁之前总是会调用它吗?
我想知道全局对象寄存器顺序和atexit寄存器顺序使用相同的顺序表.或者全局对象顺序和atexit顺序之间没有关系?
编辑:对不起,我写错了.整理示例代码时我很困惑.onExit()在~MyClass()之前调用.
In javascript window是全局对象,这意味着全局范围中的每个对象都是子对象window.那么为什么我得到这个结果:
console.log(window.foo); // No error, logs "undefined".
console.log(foo); // Uncaught ReferenceError: foo is not defined.
Run Code Online (Sandbox Code Playgroud)
那两行应该是一样的,不应该吗?
JavaScript可以轻松覆盖全局对象的属性和功能.我想找到一种方法来检查全局属性的原始版本是否已被替换.
考虑有人把它放在他们的HTML中:
<script type="text/javascript">
window.encodeURIComponent = eval;
</script>
<script type="text/javascript" src="myscript.js"></script>
Run Code Online (Sandbox Code Playgroud)
如果myscript.js在某处调用encodeURIComponent函数,它现在将表现得不可预测.那么有一种方法可以检查myscript.js内部是否有人在使用之前覆盖了该功能?
我刚刚开始在一家新公司工作,并注意到在他们的很多JS中我看起来完全没错.我有点犹豫要提起它而不确认这是错的,因为我很小,我不是JS专家,这只是我的第二天,我不想看起来很愚蠢.
所以,通常我希望模块模式看起来像:
MODULENAME = MODULENAME || {};
MODULENAME.SUBMODULENAME = (function() {
var bla = {};
bla.somefunction = function() {
//do stuff
};
//add more stuff to bla
return bla;
}());
Run Code Online (Sandbox Code Playgroud)
他们的代码是:
MODULENAME = MODULENAME || {};
MODULENAME.SUBMODULENAME = (function() {
var that = this;
that.somefunction = function() {
//do stuff
};
//add more stuff to that
return that;
}());
Run Code Online (Sandbox Code Playgroud)
现在当然因为函数没有作为带有new关键字或方法的构造函数被调用,所以它this被绑定window并且它们被定义that为this.因此,他们基本上将所有内容转储到全局对象中,并且所有子模块名称实际上都是别名window.有没有理由有人想要这样做?或者这对我来说真的是错误的吗?
编辑:
我在放置var子模块定义之前犯了一个错误,最初我写的东西略有不同,忘记删除了var.我试图让这个例子更加清晰,希望现在我的意思更明显.
编辑2:
此外,我已经看过在Firebug中执行的脚本,他们肯定是在添加所有东西 …
这是一个非常直接和基本的问题。我认为因为这一定是一个经常发生的动作,所以必须有功能,但我找不到它?有吗?如果没有的话有人知道怎么做吗?
我知道C++也允许创建类和结构的全局对象.
#include <iostream>
using std::cout;
class Test
{
public:
void fun()
{
cout<<"a= "<<a;
}
private:
int a=9;
};
Test t; // global object
int main()
{
t.fun();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
何时何地我应该使用全局对象?全局对象是否有特定用途?请帮我.
javascript ×4
c++ ×3
atexit ×1
canvas ×1
erase ×1
html5-canvas ×1
overwrite ×1
singleton ×1
window ×1