Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript init()和window.init()之间有什么区别?_Javascript_Angularjs_Google Cloud Endpoints - Fatal编程技术网

Javascript init()和window.init()之间有什么区别?

Javascript init()和window.init()之间有什么区别?,javascript,angularjs,google-cloud-endpoints,Javascript,Angularjs,Google Cloud Endpoints,我已经阅读了以下配方,其中展示了一种使用Google Cloud Endpoints后端为AngularJS前端供电的方法: 我不明白的是关于AngularJS和Cloud端点初始化的附录。相关章节如下: 附录:AngularJS+云端点初始化提示#1: 注意初始化顺序 guestbook应用程序加载以下三个不同的JS库 顺序: 安格拉斯 留言簿应用程序 Google API客户端,其中包含端点功能 要遵循此顺序,index.html包含以下内容 标签中用于加载每个JS库的标签: <

我已经阅读了以下配方,其中展示了一种使用Google Cloud Endpoints后端为AngularJS前端供电的方法:

我不明白的是关于AngularJS和Cloud端点初始化的附录。相关章节如下:

附录:AngularJS+云端点初始化提示#1: 注意初始化顺序

guestbook应用程序加载以下三个不同的JS库 顺序:

  • 安格拉斯
  • 留言簿应用程序
  • Google API客户端,其中包含端点功能
要遵循此顺序,index.html包含以下内容
标签中用于加载每个JS库的标签:

<script src="js/angular.min.js"></script>  
<script src="js/guestbook.js"></script>  
<script src="https://apis.google.com/js/client.js?onload=init"></script>
此init()函数在guestbook.js中的定义方式如下:

function init() {   window.init(); }
正如上面的代码所示,该函数只调用window.init() 函数(即全局窗口对象中定义的init()函数) 除此之外什么也不做。init()是在AngularJS中定义的 控制器如下:

$window.init= function() {   
   $scope.$apply($scope.load_guestbook_lib);
};
在AngularJS中,全局窗口对象由“$window”访问 它的包装符号。这是AngularJS的最佳实践 不直接访问窗口对象以提高可测试性

不希望在中执行初始化的原因 第一个init()方法是,这样您就可以放置尽可能多的代码 在AngularJS世界中,例如控制器、服务和指令。 因此,您可以充分利用AngularJS的强大功能并拥有所有功能 您的单元测试、集成测试等等


似乎在外部javascript文件中定义了一个全局函数
init()
。这个
init()
函数只调用
window.init()。但是window.init()不是只有全局定义的
init()函数吗?因此,在重新定义
window.init()
(因此
init()
)之前,我们不会在这里得到一个循环吗?

guestbook.js定义了一个从您的描述中显示为全局的init函数。该init函数被传递到google client.js。该全局init函数只调用window.init上的(另一个)全局函数。首先加载的angular模块应通过angular提供的$window具有setup window.init。没有循环,client.js调用guestbook.js的init,它调用角度方法$window.init,与window.init相同。

此示例尝试获取google api init事件并将其传输到AngularJS范围

什么时候


它调用全局定义的init函数,该函数反过来调用在窗口对象上定义的init方法。 由于此函数可以访问角度范围,因此它可以很好地处理角度范围

它使得在承诺中封装云端点调用变得更容易

下面是如何使它更容易

请不要依赖场外资源。显示您正在谈论的代码。非现场资源会腐烂,人们不必访问它们来帮助您。我不太明白:全局定义的函数显示为全局对象(即窗口)上的属性。那么怎么可能有两个不同的函数init和window.init呢?(据我所知,guestbook.js会覆盖角度定义的版本,反之亦然。)全局定义的init函数是在窗口对象上定义的init方法。所以我不明白为什么代码不会循环。
$window.init= function() {   
   $scope.$apply($scope.load_guestbook_lib);
};
<script src="https://apis.google.com/js/client.js?onload=init"></script>