【发布时间】:2016-05-04 19:45:13
【问题描述】:
我想知道 PHP 是否有类似 Javascript 的 IIFE(立即调用函数表达式)的任何 等价性。 PHP Closure 是否可以写成类似于 Javascript(调用、依赖、注入、指令)的工作方式?
(function(){
myModule = angular.module('myAngularApplication', []);
}());
上面的这个表达式被称为立即调用函数表达式(IIFE)。因为每当加载 .js 文件时,函数定义都会立即调用自身。 IIFE 有效的主要原因是我们可以立即执行所有代码,而无需使用全局变量和函数。现在当我们这样做时,我们的控制器创建将失败,因为我们使用全局变量来创建带有模块的控制器。为了规避这个问题,让我们使用 getter 函数 angular.module 将控制器与模块关联起来。当我们这样做的时候,为什么不把控制器也放在一个 IIFE 中呢。
(function () {
var booksController = function ($scope) {
$scope.message = "Hello from booksController";
}
angular.module('myAngularApplication').controller('booksController', booksController);
}());
来源:http://www.codeproject.com/Articles/995498/Angular-Tutorial-Part-Understanding-Modules-and 谢谢。
【问题讨论】:
-
php 代码并没有像 JS 那样将全局避免放在相同的优先级上,原因有很多。
-
JS 中的匿名 IIFE 模式是为了提供一些私有变量的外观(因为 ES5 变量只是函数作用域)。该模式扩展为
function foo() {...}; foo();,可以用任何语言完成。 -
除了你的 IIFE 确实创建了一个全局变量。 O.o
-
您是否考虑过重新考虑您的设计,而不是试图将 JS 的损坏(是的,我知道)范围界定解决方案纳入您的 php 项目?
标签: javascript php angularjs