为什么Visual Studio的AngularJS模板嵌入到函数调用中?

时间:2016-02-22 16:09:11

标签: javascript angularjs visual-studio-2015

Visual Studio的AngularJS模板看起来像

(function () {
  'use strict';
  angular.stuff ...
})();

创建函数并调用它的重点是什么?出了什么问题:

'use strict';
angular.stuff ...

2 个答案:

答案 0 :(得分:2)

它完全取决于angular.stuff是什么,但一般的想法是避免使用随机全局变量来污染你的范围。

它通常称为立即调用函数表达式(IIFE),它意味着您可以在其中定义所需的任何变量,而不必担心它们会在单独的范围内导致问题,因为它们的存在将仅限于该函数。

答案 1 :(得分:1)

正如bonyjoe所提到的,这种做法被称为IIFE。因为javascript是函数作用域而不是块作用域,如果你声明一个没有@echo off & setlocal enabledelayedexpansion set /a "sizelimit = 1 << 30" & rem // 1GB rem // GUI folder chooser rem // http://stackoverflow.com/a/15885133/1683264 set "psCommand="(new-object -COM 'Shell.Application')^ .BrowseForFolder(0,'Please choose a folder.',0,0).self.path"" for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I" if not defined folder goto :EOF rem // get volume blocksize to determine each file's size on disk later rem // http://stackoverflow.com/a/30894749/1683264 for %%I in ("%folder%") do for /f %%J in ( 'wmic volume where "driveletter='%%~dI'" get blocksize /value' ) do 2>nul set /a %%J set /P "=Enumerating files in %folder%... "<NUL rem // use "/a:-d" switch to specify *all* files, including hidden and system for /f "delims=" %%I in ('dir /s /b /a:-d "%folder%"') do ( rem // check individual file to avoid math exceeding 32-bits if %%~zI geq !sizelimit! goto readOnly set /a "sizelimit -= ((%%~zI - 1) / blocksize + 1) * blocksize" ) echo Size limit not exceeded. goto :EOF :readOnly echo Setting to read-only. attrib +r "%folder%" /sd 关键字的变量,它将成为一个全局变量。即使var不允许在没有'use strict';关键字的情况下声明obj,也不会严格执行。 IIFE防止不必要的变量溢出范围。使用IIFE还有许多其他好处。在Benefits of IIFE

上查看此文章

最初的IIFE是由Ben Alman在他的博客中提出的,这是一本很好的读物。 Ben's Blog on IIFE