在你的拳頭代碼塊,輸入「無範圍」,但CF將其解釋爲參數範圍。 CF將通過查看優先級順序來始終嘗試找到您未查找到的變量。你可以在這裏找到更多的信息:http://www.learncfinaweek.com/week1/Scopes/
你也可以通過轉儲不同的作用域並查看輸出來查看看起來像什麼。
<cfoutput>#testit(1)#</cfoutput>
<cffunction name="testit">
<cfargument name="input">
<cfset input = 3>
<cfdump var="#variables#" label="variables">
<cfdump var="#arguments#" label="arguments">
<cfdump var="#local#" label="local">
<cfreturn input>
</cffunction>
我強烈建議您將varscoper工具的輸出作爲指導,以便您明確定義變量的範圍。在這種情況下,你的第一塊代碼將如下所示。這是爲了清晰和確定您的代碼。
<cfoutput>#testit(1)#</cfoutput>
<cffunction name="testit">
<cfargument name="input">
<cfset arguments.input = 3>
<cfdump var="#variables#" label="variables">
<cfdump var="#arguments#" label="arguments">
<cfdump var="#local#" label="local">
<cfreturn arguments.input>
</cffunction>
個人而言,我不喜歡在我的函數和方法中設置或更改參數。我寧願讓它們保持不變,就像你在第二塊代碼中一樣。但即使在那裏,我會明確地範圍的參數,讓你知道它是從哪裏來的 - 即使不是varscoper標記
<cfoutput>#testit(1)#</cfoutput>
<cffunction name="testit">
<cfargument name="input">
<cfset var output = 3 + arguments.input>
<cfdump var="#variables#" label="variables">
<cfdump var="#arguments#" label="arguments">
<cfdump var="#local#" label="local">
<cfreturn output>
</cffunction>
在這裏添加
末的事情,如果現在還不清楚的是,VAR作用域把一切INT他本地的範圍。您也可以這樣做,它在功能上等同於前面的代碼塊:
<cfoutput>#testit(1)#</cfoutput>
<cffunction name="testit">
<cfargument name="input">
<cfset local.output = 3 + arguments.input>
<cfdump var="#variables#" label="variables">
<cfdump var="#arguments#" label="arguments">
<cfdump var="#local#" label="local">
<cfreturn local.output>
</cffunction>
有關CF查找正確範圍的注意事項。如果你限制你的變量,CF就不用做這個搜索,你的應用程序將會更有效率。記住,你只需要輸入一次範圍。 –
我認爲有關範圍限定的另一個說明是,它可以讓任何開發人員在日後可能需要進入代碼時更容易。函數可能是一個壞例子,因爲它們相當「被包含」了。一個普通的CFM頁面雖然引用#Foo#可能會讓開發人員想知道「Foo」變量進入頁面的意圖是什麼......意思是它應該來自表單,網址,設置在別處等等。 – Snipe656