Khai báo và khởi tạo biến trong javascript là gì?

Câu lệnh

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 khai báo một biến phạm vi chức năng hoặc phạm vi toàn cầu, tùy chọn khởi tạo nó thành một giá trị

Thử nó

cú pháp

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
9

tên biến. Nó có thể là bất kỳ định danh hợp pháp nào

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
0 Tùy chọn

Giá trị ban đầu của biến. Nó có thể là bất kỳ biểu hiện pháp lý. Giá trị mặc định là

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
1

Ngoài ra, cú pháp Gán cấu trúc cũng có thể được sử dụng để khai báo các biến

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */

Sự miêu tả

Các khai báo của

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8, bất kể chúng xuất hiện ở đâu, đều được xử lý trước khi bất kỳ mã nào được thực thi. Điều này được gọi là cẩu và được thảo luận thêm dưới đây

Phạm vi của một biến được khai báo với

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 là bối cảnh thực thi hiện tại của nó và các bao đóng của nó, là hàm bao quanh và các hàm được khai báo bên trong nó, hoặc đối với các biến được khai báo bên ngoài bất kỳ hàm nào, toàn cục. Khai báo biến trùng lặp bằng cách sử dụng
var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 sẽ không gây ra lỗi, ngay cả trong chế độ nghiêm ngặt và biến sẽ không bị mất giá trị, trừ khi thực hiện phép gán khác

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];

Các biến được khai báo bằng cách sử dụng

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 được tạo trước khi bất kỳ mã nào được thực thi trong một quy trình được gọi là cẩu. Giá trị ban đầu của chúng là
'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
1

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
2

Trong bối cảnh toàn cầu, một biến được khai báo bằng cách sử dụng

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 được thêm vào dưới dạng thuộc tính không thể định cấu hình của đối tượng toàn cầu. Điều này có nghĩa là không thể thay đổi bộ mô tả thuộc tính của nó và không thể xóa nó bằng cách sử dụng
'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
8. Tên tương ứng cũng được thêm vào danh sách trên khe
'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
9 nội bộ trên bản ghi môi trường toàn cầu [tạo thành một phần của môi trường từ vựng toàn cầu]. Danh sách các tên trong
'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
9 cho phép bộ thực thi phân biệt giữa các biến toàn cục và các thuộc tính đơn giản trên đối tượng toàn cầu

Thuộc tính được tạo trên đối tượng toàn cầu cho các biến toàn cầu, được đặt thành không thể định cấu hình vì mã định danh sẽ được coi là một biến, thay vì thuộc tính đơn giản của đối tượng toàn cầu. JavaScript có tính năng quản lý bộ nhớ tự động và sẽ vô nghĩa nếu có thể sử dụng toán tử

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
8 trên một biến toàn cục

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
8

Lưu ý rằng trong cả mô-đun NodeJS CommonJS và mô-đun ECMAScript gốc, các khai báo biến cấp cao nhất được đặt trong phạm vi mô-đun và do đó không được thêm làm thuộc tính cho đối tượng chung

Chỉ định định danh không đủ tiêu chuẩn

Đối tượng toàn cầu nằm ở đầu chuỗi phạm vi. Khi cố gắng phân giải tên thành giá trị, chuỗi phạm vi được tìm kiếm. Điều này có nghĩa là các thuộc tính trên đối tượng toàn cầu có thể nhìn thấy thuận tiện từ mọi phạm vi mà không cần phải xác định tên bằng

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
22 hoặc
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
23 hoặc
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
24

Vì đối tượng toàn cầu có thuộc tính

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
25 [
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
26], bạn có thể sử dụng đoạn mã sau

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
4

Vì vậy, đối tượng toàn cầu cuối cùng sẽ được tìm kiếm cho các định danh không đủ tiêu chuẩn. Bạn không cần phải gõ

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
27, bạn chỉ cần gõ
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
25 không đủ tiêu chuẩn. Hệ quả tất yếu, ở chế độ không nghiêm ngặt, là việc gán cho các định danh không đủ tiêu chuẩn sẽ, nếu không có biến cùng tên nào được khai báo trong chuỗi phạm vi, giả sử bạn muốn tạo một thuộc tính có tên đó trên đối tượng toàn cầu

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
7

Ở chế độ nghiêm ngặt, việc gán cho một mã định danh không đủ tiêu chuẩn ở chế độ nghiêm ngặt sẽ dẫn đến

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
29, để tránh việc vô tình tạo các thuộc tính trên đối tượng chung

Lưu ý rằng ngụ ý của điều trên, trái ngược với thông tin sai lệch phổ biến, JavaScript không có các biến ngầm định hoặc không được khai báo, nó chỉ có một cú pháp trông giống như vậy.

var cẩu

Bởi vì các khai báo

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
8 được xử lý trước khi bất kỳ mã nào được thực thi, khai báo một biến ở bất kỳ đâu trong mã tương đương với khai báo nó ở đầu. Điều này cũng có nghĩa là một biến có thể được sử dụng trước khi nó được khai báo. Hành vi này được gọi là cẩu, vì có vẻ như khai báo biến được di chuyển lên đầu hàm hoặc mã toàn cầu

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
0

Điều này được ngầm hiểu là

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
1

Vì lý do đó, nên luôn khai báo các biến ở đầu phạm vi của chúng [đầu mã toàn cầu và đầu mã chức năng] để rõ ràng biến nào thuộc phạm vi chức năng [cục bộ] và biến nào được giải quyết trên chuỗi phạm vi

Điều quan trọng cần chỉ ra là chỉ phần khai báo của biến được nâng lên chứ không phải phần khởi tạo của nó. Việc khởi tạo chỉ xảy ra khi đạt đến câu lệnh gán. Cho đến lúc đó biến vẫn là

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
1 [nhưng được khai báo]

'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
3

Điều này được ngầm hiểu là

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
0

ví dụ

Khai báo và khởi tạo hai biến

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
1

Gán hai biến với giá trị chuỗi đơn

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
2

Điều này tương đương với

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
3

Hãy chú ý đến thứ tự

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
4

Ở đây,

var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
82 và
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
83 được khai báo trước khi bất kỳ mã nào được thực thi, nhưng việc gán diễn ra sau đó. Tại thời điểm đánh giá
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
84,
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
83 tồn tại nên không có
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
29 nào được ném ra và giá trị của nó là
'use strict';
function foo[] {
  var x = 1;
  function bar[] {
    var y = 2;
    console.log[x]; // 1 [function `bar` closes over `x`]
    console.log[y]; // 2 [`y` is in scope]
  }
  bar[];
  console.log[x]; // 1 [`x` is in scope]
  console.log[y]; // ReferenceError in strict mode, `y` is scoped to `bar`
}

foo[];
1. Vì vậy,
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
82 được gán giá trị không xác định. Sau đó,
var varname1 [= value1] [, varname2 [= value2] ... [, varnameN [= valueN]]]
83 được gán giá trị
var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
40. Do đó, sau dòng đầu tiên,
var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
41, do đó có kết quả

Khởi tạo một số biến

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
5

Ví dụ tương tự như trên nhưng với một chế độ nghiêm ngặt

var { bar } = foo; // where foo = { bar:10, baz:12 };
/* This creates a variable with the name 'bar', which has a value of 10 */
6

Toàn cầu tiềm ẩn và phạm vi chức năng bên ngoài

Các biến dường như là toàn cục tiềm ẩn có thể là tham chiếu đến các biến trong phạm vi hàm bên ngoài

Khai báo và khởi tạo biến là gì?

Khi bạn khai báo một biến, bạn cũng nên khởi tạo nó. Khởi tạo là quá trình gán giá trị cho Biến . Mỗi ngôn ngữ lập trình có phương pháp khởi tạo biến riêng. Nếu không gán giá trị cho Biến thì quá trình đó chỉ được gọi là Khai báo.

Khai báo biến trong JavaScript là gì?

Khai báo biến JavaScript . var tên xe; . đặt tên xe; . You declare a JavaScript variable with the var or the let keyword: var carName; or: let carName; After the declaration, the variable has no value [technically it is undefined ].

Làm cách nào để khởi tạo biến trong JavaScript?

Để gán giá trị cho biến [khởi tạo biến bằng một giá trị], sử dụng toán tử gán = để đặt tên biến bằng một phần dữ liệu [number, boolean, string, array, object, function, etc.]

Khởi tạo biến là gì và giải thích bằng ví dụ?

Khởi tạo biến có nghĩa là chỉ định giá trị ban đầu để gán cho biến đó [i. e. , trước khi nó được sử dụng]. Lưu ý rằng một biến không được khởi tạo sẽ không có giá trị xác định, do đó nó không thể được sử dụng cho đến khi nó được gán một giá trị như vậy.

Chủ Đề