Trong chức năng của bạn, bạn đang sửa đổi nội dung của hashtable do đó không cần sử dụng $ global trừ khi hàm của bạn (hoặc hàm gọi giữa hàm của bạn và phạm vi toàn cục) xảy ra có biến cục bộ $ Var1 và $ Var2 (BTW không phải là bạn thiếu $
). Nếu đây là tất cả các mã của riêng bạn sau đó tôi muốn nói để lại nó như là. Tuy nhiên, nếu mã của bạn cho phép mã của người khác gọi hàm của bạn, thì tôi sẽ sử dụng trình chỉ định $global:Var1
để đảm bảo bạn đang truy cập biến toàn cục và không vô tình truy cập vào biến có cùng tên trong hàm đang gọi hàm của bạn .
Một điều cần biết về Phạm vi năng động trong PowerShell là khi bạn gán giá trị cho biến trong một hàm và biến điều đó xảy ra là một ví dụ toàn cầu:
$someGlobal = 7
function foo { $someGlobal = 42; $someGlobal }
foo
$someGlobal
PowerShell sẽ làm một "copy-on -write "hoạt động trên biến $ someGlobal trong hàm. Nếu mục đích của bạn là thực sự sửa đổi toàn cầu thì bạn sẽ sử dụng thông số $global:
:
$someGlobal = 7
function foo { $global:someGlobal = 42; $someGlobal }
foo
$someGlobal
Nguồn
2014-06-26 20:44:28
Cảm ơn bạn Keith (Tôi đã thay đổi lỗi đánh máy của mình)! Đó là chính xác những gì đã được một chút bối rối: mảng và băm (những gì khác?) Có thể được thay đổi trong một chức năng mà không cần sử dụng $ toàn cầu: nhưng các biến bình thường không thể. – gooly
Về cơ bản, bạn có thể thay đổi nội dung của một đối tượng được tham chiếu (các thuộc tính trên một đối tượng, các phần tử trong một mảng, các phần tử trong một hashtable). Những gì bạn không thể thay đổi mà không sử dụng '$ global:' là đối tượng thực tế (mảng/hashtable) tham chiếu biến. –