复制代码 代码如下:
/*
1, 变量类型:
JavaScript 是弱类型, 变量可存储任意类型, 并且运行期间类型可变;
-> 变量可进行类型转换;
*/
/*
2, 变量声明:
*/
var i;
var index;
var i, index;
var i = 0, index = 2;
/*
变量声明, 无初始值时, 值为 undefined;
并且 var 声明的变量, 不能使用 delete 操作符删除;
重复声明为产生覆盖, 不会造成错误;
遗漏声明, 则会把变量隐式声明此变量, 并做为全局变量; (下节介绍)
*/
/*
3, 变量作用域:
以函数划分: 函数内部声明的变量, 只能运行的函数内部, 即局部变量; (闭包仍可引用);
内部变量比全局变量优先级别高; ex:
*/
var g = 'global';
function check() {
var g = 'local';
console.log(g); // local
}
check();
/* 变量尽可能都使用 var 声明 */
/* 没有块级作用域 */
if (false) {
var test = 2;
function t() {
console.log('t function');
}
}
t(); // t function;
console.log(test); // undefined;
/*
例外:
firefox 会报错;
t is not defined;
test 值为 undefined;(末声明和赋值的变量都是 undefined)
*/
/* 变量声明会提前挂起 */
function f() {
console.log(test); // undefined
var test = 'test';
console.log(test); // 'test'
}
// 转化为
function f() {
var test;
console.log(test); // 变量仅声明, 则初始化为 undefined
test = 'test';
console.log(test); // 变量已赋值, 'test'
}
/* 未定义变量和未赋值变量 */
console.log(t); // 直接使用变量 t;
// 注: 直接给变量赋值时, 会隐式的把变量做为全局对待;
var t; // 未赋值变量, undefined;
/*
4, 基本类型和引用类型:
Number/boolean/null/undefined/ 基本类型;
Array/Object/Function 引用类型
第五版, 63页:
无论将字符串看作是行为与基本类型相似的不可变引用类型,
还是将它看作使用引用类型的内部功能实现的基本类型, 结果都是一样的;
即: String 类型表现为 基本类型;
下面实例说明基本类型和引用类型差别:
*/
var a = 3.14;
var b = a;
a = 4;
console.log(a, b); // 4, 3.14;
var a = [1, 2, 3];
var b = a;
a[0] = 99;
console.log(a, b); // 相同; [99, 2, 3];
// 数组是引用类型, 变量a和b 指向同一块内存地址;
// 变量保存基本类型的实际值, 而保存引用类型的引用(类指针);
/*
5, 垃圾收集
引用类型是没有固定大小的, 比如: Array, 随时可以修改 length;
变量并不能直接保存引用的值, 而是被存储在某个位置, 变量保存的只是对此位置的引用.
所以, JavaScript 会动态分配内存来存储实体;
最终要释放这些内存以便再用, 否则会消耗所有可用内存导致系统崩溃;
JavaScript 不要求手动释放内存; 它使用一种称为垃圾收集方法[方法不可见];
它会把对不再使用的对象所占用的内存释放;
*/
var s = 'hello';
var u = s.toUpperCase();
s = u; // 不能再获取到 'hello' 值;
// 环境中不再有 'hello' 引用[没有变量指向它]
// (是否进行回收, 是通过是否存在赋值决定的)
/*
6, 作为属性的变量
全局对象
window, this, Math;
浏览器中的:navigator, screen;
局部变量:调用对象
调用对象
全局变量是特殊的全局对象的属性, 那么局部变量被称为调用对象(call object)的属性;
函数的参数和局部变量作为调用对象的属性而存储;
(使用独立对象存储局部变量使 JavaScript 可防止局部变量覆盖同名全局变量的值)
JavaScript 的执行环境
JavaScript 解释器执行一个函数时, 会为函数创建一个执行环境(execution context);
一个执行环境就是所有 JavaScript 代码段执行时所在的环境.
运行不属性任何函数的 JavaScript 代码的环境使用的就是全局对象.
所有 JavaScript 函数都运行在 自己独有的执行环境中, 并且有自己的调用对象, 在调用对象中定义了局部变量.
JavaScript 解释器可在不同的全局执行环境中运行脚本, 并且这些环境不脱节, 彼此可引用;
(window-iframe);
深入理解变量作用域
每个 JavaScript 执行环境都有一个和它关联在一起的作用域链(scope chain);
作用域链是一个对象列表或对象链;
当 JavaScript 代码需要查询变量 X 的值时, 它就开始查看此链上的第一个对象;
如果对象存在一个名为 x 的属性, 那么就采用那个属性的值.
如果没有, JavaScript 会继续查询链中的第二个对象.
如果还没有找到, 继续查询下一个对象. 以此类推...
补充:
f() 作用域 -> 闭包作用域 -> var 变量所在作用域
-> Object 的原型作用域 -> Object 类属性作用域
-> 顶层作用域(window);
*/
/*
1, 变量类型:
JavaScript 是弱类型, 变量可存储任意类型, 并且运行期间类型可变;
-> 变量可进行类型转换;
*/
/*
2, 变量声明:
*/
var i;
var index;
var i, index;
var i = 0, index = 2;
/*
变量声明, 无初始值时, 值为 undefined;
并且 var 声明的变量, 不能使用 delete 操作符删除;
重复声明为产生覆盖, 不会造成错误;
遗漏声明, 则会把变量隐式声明此变量, 并做为全局变量; (下节介绍)
*/
/*
3, 变量作用域:
以函数划分: 函数内部声明的变量, 只能运行的函数内部, 即局部变量; (闭包仍可引用);
内部变量比全局变量优先级别高; ex:
*/
var g = 'global';
function check() {
var g = 'local';
console.log(g); // local
}
check();
/* 变量尽可能都使用 var 声明 */
/* 没有块级作用域 */
if (false) {
var test = 2;
function t() {
console.log('t function');
}
}
t(); // t function;
console.log(test); // undefined;
/*
例外:
firefox 会报错;
t is not defined;
test 值为 undefined;(末声明和赋值的变量都是 undefined)
*/
/* 变量声明会提前挂起 */
function f() {
console.log(test); // undefined
var test = 'test';
console.log(test); // 'test'
}
// 转化为
function f() {
var test;
console.log(test); // 变量仅声明, 则初始化为 undefined
test = 'test';
console.log(test); // 变量已赋值, 'test'
}
/* 未定义变量和未赋值变量 */
console.log(t); // 直接使用变量 t;
// 注: 直接给变量赋值时, 会隐式的把变量做为全局对待;
var t; // 未赋值变量, undefined;
/*
4, 基本类型和引用类型:
Number/boolean/null/undefined/ 基本类型;
Array/Object/Function 引用类型
第五版, 63页:
无论将字符串看作是行为与基本类型相似的不可变引用类型,
还是将它看作使用引用类型的内部功能实现的基本类型, 结果都是一样的;
即: String 类型表现为 基本类型;
下面实例说明基本类型和引用类型差别:
*/
var a = 3.14;
var b = a;
a = 4;
console.log(a, b); // 4, 3.14;
var a = [1, 2, 3];
var b = a;
a[0] = 99;
console.log(a, b); // 相同; [99, 2, 3];
// 数组是引用类型, 变量a和b 指向同一块内存地址;
// 变量保存基本类型的实际值, 而保存引用类型的引用(类指针);
/*
5, 垃圾收集
引用类型是没有固定大小的, 比如: Array, 随时可以修改 length;
变量并不能直接保存引用的值, 而是被存储在某个位置, 变量保存的只是对此位置的引用.
所以, JavaScript 会动态分配内存来存储实体;
最终要释放这些内存以便再用, 否则会消耗所有可用内存导致系统崩溃;
JavaScript 不要求手动释放内存; 它使用一种称为垃圾收集方法[方法不可见];
它会把对不再使用的对象所占用的内存释放;
*/
var s = 'hello';
var u = s.toUpperCase();
s = u; // 不能再获取到 'hello' 值;
// 环境中不再有 'hello' 引用[没有变量指向它]
// (是否进行回收, 是通过是否存在赋值决定的)
/*
6, 作为属性的变量
全局对象
window, this, Math;
浏览器中的:navigator, screen;
局部变量:调用对象
调用对象
全局变量是特殊的全局对象的属性, 那么局部变量被称为调用对象(call object)的属性;
函数的参数和局部变量作为调用对象的属性而存储;
(使用独立对象存储局部变量使 JavaScript 可防止局部变量覆盖同名全局变量的值)
JavaScript 的执行环境
JavaScript 解释器执行一个函数时, 会为函数创建一个执行环境(execution context);
一个执行环境就是所有 JavaScript 代码段执行时所在的环境.
运行不属性任何函数的 JavaScript 代码的环境使用的就是全局对象.
所有 JavaScript 函数都运行在 自己独有的执行环境中, 并且有自己的调用对象, 在调用对象中定义了局部变量.
JavaScript 解释器可在不同的全局执行环境中运行脚本, 并且这些环境不脱节, 彼此可引用;
(window-iframe);
深入理解变量作用域
每个 JavaScript 执行环境都有一个和它关联在一起的作用域链(scope chain);
作用域链是一个对象列表或对象链;
当 JavaScript 代码需要查询变量 X 的值时, 它就开始查看此链上的第一个对象;
如果对象存在一个名为 x 的属性, 那么就采用那个属性的值.
如果没有, JavaScript 会继续查询链中的第二个对象.
如果还没有找到, 继续查询下一个对象. 以此类推...
补充:
f() 作用域 -> 闭包作用域 -> var 变量所在作用域
-> Object 的原型作用域 -> Object 类属性作用域
-> 顶层作用域(window);
*/
标签:
变量
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“浅说js变量”评论...
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
2024年11月16日
2024年11月16日
- 《怪猎荒野》PS5Pro主机版对比:B测性能都不稳定
- 黄宝欣.1992-黄宝欣金装精选2CD【HOMERUN】【WAV+CUE】
- 群星.1996-宝丽金流行爆弹精丫宝丽金】【WAV+CUE】
- 杜德伟.2005-独领风骚新歌精选辑3CD【滚石】【WAV+CUE】
- 安与骑兵《心无疆界》[低速原抓WAV+CUE]
- 柏菲唱片-群星〈胭花四乐〉2CD[原抓WAV+CUE]
- 金典女声发烧靓曲《ClassicBeautifulSound》2CD[低速原抓WAV+CUE]
- 王杰1992《封锁我一生》粤语专辑[WAV+CUE][1G]
- 群星《一人一首成名曲 (欧美篇)》6CD[WAV/MP3][7.39G]
- 东来东往2004《回到我身边·别说我的眼泪你无所谓》先之唱片[WAV+CUE][1G]
- MF唱片-《宝马[在真HD路上]》2CD[低速原抓WAV+CUE]
- 李娜《相信我》新时代[WAV+CUE]
- 2019明达发烧碟MasterSuperiorAudiophile[WAV+CUE]
- 蔡幸娟.1993-相爱容易相处难【飞碟】【WAV+CUE】
- 陆虎.2024-是否愿意成为我的全世界【Hikoon】【FLAC分轨】