Hướng dẫn javascript use variable without declaring - javascript sử dụng biến mà không cần khai báo
Là "var" tùy chọn? Show
giống như ?
Tôi thấy cả hai đều làm việc từ bài kiểm tra của tôi, tôi cho rằng 3 là tùy chọn. Có đúng không?
Bartoszkp 33.9K13 Huy hiệu vàng103 Huy hiệu bạc129 Huy hiệu đồng13 gold badges103 silver badges129 bronze badges Đã hỏi ngày 21 tháng 3 năm 2010 lúc 1:06Mar 21, 2010 at 1:06
3 Chúng có nghĩa là những điều khác nhau. Nếu bạn sử dụng 3, biến được khai báo trong phạm vi bạn đang ở (ví dụ: của hàm). Nếu bạn không sử dụng 3, biến có thể bong trào qua các lớp phạm vi cho đến khi nó gặp một biến theo tên đã cho hoặc đối tượng toàn cầu (cửa sổ, nếu bạn đang thực hiện nó trong trình duyệt), sau đó nó sẽ gắn. Sau đó, nó rất giống với một biến toàn cầu. Tuy nhiên, nó vẫn có thể bị xóa với 6 (rất có thể là bằng mã của người khác cũng không sử dụng 3). Nếu bạn sử dụng 3 trong phạm vi toàn cầu, biến thực sự toàn cầu và không thể bị xóa.Theo tôi, đây là một trong những vấn đề nguy hiểm nhất với JavaScript, và nên không được chấp nhận, hoặc ít nhất là đưa ra cảnh báo về cảnh báo. Lý do là, thật dễ dàng để quên 3 và tình cờ có một tên biến phổ biến bị ràng buộc với đối tượng toàn cầu. Điều này tạo ra hành vi kỳ lạ và khó để gỡ lỗi.
Đã trả lời ngày 21 tháng 3 năm 2010 lúc 1:10Mar 21, 2010 at 1:10
Stefano Borinistefano BoriniStefano Borini 135K95 Huy hiệu vàng291 Huy hiệu bạc419 Huy hiệu đồng95 gold badges291 silver badges419 bronze badges 15 Đây là một trong những phần khó khăn của JavaScript, nhưng cũng là một trong những tính năng cốt lõi của nó. Một biến được tuyên bố với 3 "bắt đầu cuộc sống của nó" ngay khi bạn tuyên bố nó. Nếu bạn rời khỏi 3, giống như bạn đang nói về một biến mà bạn đã sử dụng trước đây.
Liên quan đến phạm vi, không phải là các biến tự động trở thành toàn cầu. Thay vào đó, JavaScript sẽ đi qua chuỗi phạm vi để xem bạn đã sử dụng biến trước đây. Nếu nó tìm thấy một thể hiện của một biến cùng tên được sử dụng trước đó, nó sẽ sử dụng nó và bất kỳ phạm vi nào nó được khai báo. Nếu nó không gặp biến ) và sẽ gắn biến vào nó.not true that variables automatically become global. Rather, Javascript will traverse up the scope chain to see if you have used the variable before. If it finds an instance of a variable of the same name used before, it'll use that and whatever scope it was declared in. If it doesn't encounter the variable anywhere it'll eventually hit the global object ( 2 in a browser) and will attach the variable to it.
Hành vi này thực sự mạnh mẽ khi được sử dụng với các chức năng và gọi lại lồng nhau. Tìm hiểu về 3 là gì và phạm vi hoạt động là điều quan trọng nhất trong JavaScript.Đã trả lời ngày 21 tháng 3 năm 2010 lúc 4:17Mar 21, 2010 at 4:17
lừa dối ♦ lừa dối♦deceze 499K81 Huy hiệu vàng720 Huy hiệu bạc868 Huy hiệu Đồng81 gold badges720 silver badges868 bronze badges 8
Không, họ không tương đương. Với 4, bạn đang sử dụng biến toàn cầu.Tuyên bố thứ hai tạo ra một biến cục bộ cho phạm vi bạn đang sử dụng. Hãy thử mã sau để hiểu sự khác biệt:
Hàm thứ hai làm thay đổi giá trị của biến toàn cầu "bên ngoài", nhưng hàm thứ nhất thì không.
lietus 1992 Huy hiệu bạc11 Huy hiệu đồng2 silver badges11 bronze badges Đã trả lời ngày 21 tháng 3 năm 2010 lúc 1:16Mar 21, 2010 at 1:16
EinekieinekiEineki Phù bằng vàng 14.6K651 Huy hiệu bạc58 Huy hiệu đồng6 gold badges51 silver badges58 bronze badges 1 Có nhiều hơn một chút so với chỉ là địa phương so với toàn cầu. Các biến toàn cầu được tạo bằng 3 khác với các biến được tạo ra mà không có. Xem xét điều này:
Dựa trên các câu trả lời cho đến nay, các biến toàn cầu này, 6, 7 và 8 đều tương đương. Đây không phải là trường hợp. Các biến toàn cầu được thực hiện bằng 3 (chính xác) được gán thuộc tính 0 nội bộ, do đó chúng không thể bị xóa.not the case. Global variables made with 3 are (correctly) assigned the internal 0 property, such that they cannot be deleted.
Đây là lý do tại sao bạn phải luôn luôn sử dụng 3, ngay cả đối với các biến toàn cầu.always use 3, even for global variables.Đã trả lời ngày 21 tháng 3 năm 2010 lúc 2:54Mar 21, 2010 at 2:54
Bcherrybcherrybcherry 7.0922 Huy hiệu vàng27 Huy hiệu bạc37 Huy hiệu đồng2 gold badges27 silver badges37 bronze badges 1 Có rất nhiều sự nhầm lẫn xung quanh chủ đề này, và không có câu trả lời nào hiện có bao gồm mọi thứ rõ ràng và trực tiếp. Dưới đây là một số ví dụ với ý kiến nội tuyến.
Một tuyên bố đặt một lá cờ dontdelete. Một bài tập không. Một tuyên bố liên kết biến đó với phạm vi hiện tại. Một biến được gán nhưng không được tuyên bố sẽ tìm kiếm một phạm vi để tự đính kèm. Điều đó có nghĩa là nó sẽ đi qua chuỗi thực phẩm của phạm vi cho đến khi một biến có cùng tên được tìm thấy. Nếu không tìm thấy, nó sẽ được gắn vào phạm vi cấp cao nhất (thường được gọi là toàn cầu).
Đối với một mô tả rất rõ ràng về những gì đang xảy ra, phân tích này về chức năng xóa bao gồm sự khởi tạo và gán biến đổi rộng rãi. Đã trả lời ngày 13 tháng 4 năm 2013 lúc 12:53Apr 13, 2013 at 12:53
Steve Kallestadsteve KallestadSteve Kallestad 3,4042 Huy hiệu vàng21 Huy hiệu bạc31 Huy hiệu đồng2 gold badges21 silver badges31 bronze badges 2
3 là tùy chọn. 3 đặt một biến trong phạm vi cục bộ. Nếu một biến được xác định mà không có 3, thì nó nằm trong phạm vi toàn cầu và không thể loại bỏ.chỉnh sửaTôi nghĩ rằng phần không thể giải quyết được là đúng vào một thời điểm với một môi trường nhất định. Tôi phải mơ nó. Đã trả lời ngày 21 tháng 3 năm 2010 lúc 1:12Mar 21, 2010 at 1:12
KZHKZHkzh 19.2K12 Huy hiệu vàng71 Huy hiệu bạc96 Huy hiệu đồng12 gold badges71 silver badges96 bronze badges 1 Kiểm tra fiddle này: http://jsfiddle.net/gwr6z/2/
Đã trả lời ngày 10 tháng 6 năm 2014 lúc 18:23Jun 10, 2014 at 18:23
Người đàn ông sữaMilk Man 1.25813 huy hiệu bạc21 Huy hiệu đồng13 silver badges21 bronze badges 2 Chúng không giống nhau. Biến không được khai báo (không có 3) được coi là thuộc tính của đối tượng toàn cầu. (Thường là đối tượng 2, trừ khi bạn đang ở trong khối 7)Các biến được khai báo với 3 là các biến cục bộ bình thường và không hiển thị bên ngoài hàm mà chúng được khai báo. (Lưu ý rằng JavaScript không có phạm vi khối)Cập nhật: Ecmascript 2015 9 đã được giới thiệu trong Ecmascript 2015 để có phạm vi khối.have block scope.
Dexter 3.6463 Huy hiệu vàng43 Huy hiệu bạc54 Huy hiệu đồng3 gold badges43 silver badges54 bronze badges Đã trả lời ngày 21 tháng 3 năm 2010 lúc 1:10Mar 21, 2010 at 1:10
SlaksslaksSLaks 851K174 Huy hiệu vàng1881 Huy hiệu bạc1949 Huy hiệu đồng174 gold badges1881 silver badges1949 bronze badges 0 Từ khóa VAR trong JavaScript là có cho một mục đích. Nếu bạn khai báo một biến mà không có từ khóa VAR, như thế này: 0Nó trở thành một biến toàn cầu có thể được truy cập từ bất kỳ phần nào trong tập lệnh của bạn. Nếu bạn không cố ý làm điều đó hoặc không biết về nó, nó có thể gây đau nếu bạn sử dụng lại tên biến ở một nơi khác trong JavaScript của bạn. Nếu bạn khai báo biến với từ khóa VAR, như thế này: 1Nó là cục bộ của phạm vi ({] - niềng răng, chức năng, tệp, tùy thuộc vào nơi bạn đặt nó). Đây là một cách an toàn hơn để điều trị các biến số. Vì vậy, trừ khi bạn đang thực hiện nó trên mục đích, hãy cố gắng khai báo biến với từ khóa VAR chứ không phải không có. Đã trả lời ngày 21 tháng 3 năm 2010 lúc 1:16Mar 21, 2010 at 1:16
Cyril Guptacyril GuptaCyril Gupta 13.3k11 Huy hiệu vàng64 Huy hiệu bạc84 Huy hiệu đồng11 gold badges64 silver badges84 bronze badges 2 Hãy xem xét câu hỏi này được hỏi tại Stackoverflow hôm nay: Câu hỏi JavaScript đơn giản Một thử nghiệm tốt và một ví dụ thực tế là những gì xảy ra trong kịch bản trên ... nhà phát triển đã sử dụng tên của hàm JavaScript trong một trong các biến của mình.practical example is what happens in the above scenario... Vấn đề với mã là gì? Mã chỉ hoạt động ngay lần đầu tiên người dùng nhấp vào nút. Giải pháp là gì? Thêm từ khóa 3 keyword before the variable name.
Đã trả lời ngày 21 tháng 3 năm 2010 lúc 1:30Mar 21, 2010 at 1:30
Leniel Maccaferrileniel MaccaferriLeniel Maccaferri 98.2K44 Huy hiệu vàng361 Huy hiệu bạc464 Huy hiệu đồng44 gold badges361 silver badges464 bronze badges VAR không cho phép bạn, lập trình viên, khai báo một biến vì JavaScript không có biến. JavaScript có các đối tượng. VAR tuyên bố một tên cho một đối tượng không xác định, rõ ràng. Nhiệm vụ gán một tên làm tay cầm cho một đối tượng đã được cung cấp một giá trị. Sử dụng VAR cho biết thông tin Javacript hai điều:
Bỏ sót của VAR cho người thông dịch Javacript sử dụng phiên bản trước được tìm thấy đầu tiên của một đối tượng có cùng tên. VAR như một từ khóa phát sinh từ một quyết định kém của nhà thiết kế ngôn ngữ giống như cách mà JavaScript như một cái tên phát sinh từ một quyết định kém. PS. Nghiên cứu các ví dụ mã ở trên. Đã trả lời ngày 24 tháng 10 năm 2013 lúc 19:25Oct 24, 2013 at 19:25
Tất cả mọi thứ về phạm vi sang một bên, chúng có thể được sử dụng khác nhau. 2Một cái gì đó một cái gì đó tuyên bố vs biểu thức Đã trả lời ngày 15 tháng 7 năm 2015 lúc 1:33Jul 15, 2015 at 1:33
CodebleDcodeBlingCodebling 10,4K2 Huy hiệu vàng34 Huy hiệu bạc61 Huy hiệu Đồng2 gold badges34 silver badges61 bronze badges Không, nó không phải là "bắt buộc", nhưng nó cũng có thể là nó có thể gây ra các vấn đề lớn nếu bạn không. Không xác định một biến với var đặt biến đó bên trong phạm vi của một phần của mã. của chức năng bạn đang ở. Đã trả lời ngày 18 tháng 11 năm 2015 lúc 16:48Nov 18, 2015 at 16:48
Chúng ta có thể sử dụng một biến mà không cần khai báo không?Một biến không thể được sử dụng trong một chương trình trừ khi nó đã được khai báo..
Điều gì xảy ra nếu bạn không khai báo biến trong JavaScript?Nếu bạn không tuyên bố một biến một cách rõ ràng, JavaScript sẽ tuyên bố nó ngầm cho bạn.JavaScript will declare it implicitly for you. |