01/10/2018, 17:00

Sự khác nhau giữa scope trong JavaScript và scope trong các ngôn ngữ khác

Các anh cho em hỏi làm thế nào để kiểm soát scope tốt ạ. Với lại cho scope của các ngôn ngữ khác nhau có khác nhau không ạ. Em thấy scope của python khá khác với scope của js. Chẳng hạn
với js

x = 1;
function foo() {
  x = 3;
}
foo(); /// x sẽ là 3

nhưng với python làm tương tự thì x vẫn bằng 1 nếu không thêm global x trước x = 3. Vậy có phải python quá bất tiện ko ạ

Khang Việt viết 19:15 ngày 01/10/2018

format code như thế này nha em , thêm 3 dấu ` vào đầu và cuối
your code
Mỗi ngôn ngữ có đặc điểm riêng , muốn kiểm soát Scope tốt thì phải hiểu rõ nó là gì .

Minh Triet Tran viết 19:07 ngày 01/10/2018

V mà trước h em cứ tưởng scope của các ngôn ngữ giống nhau

Khang Việt viết 19:13 ngày 01/10/2018

Nhưng cũng có nhiều ngôn ngữ sẽ giống nhau , format code lai như anh nói nhé !

Quan viết 19:11 ngày 01/10/2018

Các anh cho em hỏi làm thế nào để kiểm soát scope tốt ạ. Với lại cho scope của các ngôn ngữ khác nhau có khác nhau không ạ. Em thấy scope của python khá khác với scope của js. Chẳng hạn

Về nguyên lý thì tránh dùng các biến global mà hãy access thông qua các interface của Class object. Trong đó ta sẽ khai báo các private variable để kiểm soát cho tốt.

Minh Triet Tran viết 19:01 ngày 01/10/2018

thông qua các interface của class object là sao v anh

Quan viết 19:11 ngày 01/10/2018

Ví dụ nếu em khởi tạo biến ở đầu chương trình. Thì sau một đoạn code dài thì có thể biến đó đã bị thay đổi (do kiểm soát ko tốt) chẳng hạn. Điều đó dẫn tới việc nếu c trình chạy sai bạn sẽ mất thời gian dò ngược lại rất cực.

Lúc này nếu bạn khai báo biến đó ở trong class nào đó chẳng hạn. Bạn access biến đó thì nó chỉ nằm trong object đó thôi. Tra ngược cũng dễ mà giá trị của nó cũng chỉ liên quan tới instance bạn tạo ra thôi, nằm trong đó nên nó sẽ không bị can thiệp ở đoạn giữa của code.

Minh Triet Tran viết 19:08 ngày 01/10/2018

Ohh em hiểu rồi v khi làm project sẽ có những trường hợp nào bắt buộc mình dùng global varialbe thế anh, nếu 1 project chỉ xài local variable có được ko anh

Quan viết 19:04 ngày 01/10/2018

global variable chỉ nên dùng trong project để làm các static variable. Tức là nó tham số khởi tạo của chương trình và không nên thay đổi ở bất cứ trường hợp nào.

Một project chỉ xài local variable là quá lý tưởng. Và nên hạn chế scope của chúng nhỏ nhất có thể. Ngay cả nó ở trong class cũng thế. Hãy cố gắng dùng local variable nhiều nhất có thể.

Hung viết 19:10 ngày 01/10/2018

Trong Python, em khai báo local variable rất đơn giản, cú pháp var_name = value.
Tuy nhiên, trong JavaScript thì cú pháp khác, phải thêm var, hoặc let, hoặc const vào đầu, được cú pháp: var var_name = value.

Em có Python code thế này:

x = 1
def change_x():
  x = 3

change_x()
print(x) // 1

Chuyển qua JavaScript, em phải viết lại như sau:

x = 1;
function changeX() {
  var x = 3;
}

changeX();
console.log(x); // 1

Nếu không có var thì x mà em sử dụng trong changeX sử dụng x bên ngoài, có giá trị là 1.

Minh Triet Tran viết 19:02 ngày 01/10/2018

Ohh h em mới biết. thế scope trong C hay C++ và các ngôn ngữ khác thì sẽ giống scope của python hay js hơn v anh

Hung viết 19:14 ngày 01/10/2018

C và C++ cũng theo lexcial scope, nên nó cũng sẽ gần giống với Python hoặc JavaScript, nhưng em cũng nên tập trung 1 ngôn ngữ thôi, vì mỗi ngôn ngữ cách capture các variables trong outer scopes khác nhau chút ít, có khi không capture (PHP), final variable (local class trong Java 8).

Nếu em viết Shell Script hoặc sử dụng this trong JavaScript, thì nó truyền theo dynamic scope. Lexical scope và dymanic scope là 2 cách để truy xuất 1 variable bên ngoài. Em chỉ cần biết lexical scope là đủ rồi. Còn Dynamic gì kia thì có thể google thêm.

Minh Triet Tran viết 19:14 ngày 01/10/2018

Cám ơn về những chia sẻ của anh không bik em có thể kết bạn với anh qua facebook được ko ạ

Bài liên quan
0