首页 web前端 js教程 浅说js变量_javascript技巧

浅说js变量_javascript技巧

May 16, 2016 pm 06:06 PM
变量

复制代码 代码如下:

/*
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);
*/

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

使用Windows 11和10环境变量进行配置文件操作指南 使用Windows 11和10环境变量进行配置文件操作指南 Nov 01, 2023 pm 08:13 PM

环境变量是运行应用和程序的位置路径(或环境)。它们可以由用户创建、编辑、管理或删除,并在管理某些进程的行为时派上用场。下面介绍如何创建配置文件以同时管理多个变量,而无需在Windows上单独编辑它们。如何在环境变量中使用配置文件Windows11和10在Windows上,有两组环境变量–用户变量(应用于当前用户)和系统变量(全局应用)。但是,使用像PowerToys这样的工具,您可以创建一个单独的配置文件来添加新的和现有的变量并一次管理它们。方法如下:步骤1:安装PowerToysPowerTo

PHP7中的变量的严格模式:如何减少潜在的错误? PHP7中的变量的严格模式:如何减少潜在的错误? Oct 19, 2023 am 10:01 AM

PHP7中引入了严格模式,该模式可以帮助开发者减少潜在的错误。本文将介绍什么是严格模式以及如何在PHP7中使用严格模式来减少错误。同时,将通过代码示例演示严格模式的应用。一、什么是严格模式?严格模式是PHP7中的一个特性,它可以帮助开发者编写更规范的代码,减少一些常见的错误。在严格模式下,会对变量的声明、类型检查、函数调用等进行严格的限制和检测。通

内部错误:无法创建临时目录 [已解决] 内部错误:无法创建临时目录 [已解决] Apr 17, 2023 pm 03:04 PM

Windows系统允许用户使用可执行/设置文件在您的系统上安装各种类型的应用程序。最近,许多Windows用户开始抱怨他们收到一个名为INTERNALERROR:cannotcreatetemporarydirectory在他们的系统上尝试使用可执行文件安装任何应用程序的错误。问题不仅限于此,而且还阻止用户启动任何现有的应用程序,这些应用程序也安装在Windows系统上。下面列出了一些可能的原因。运行可执行文件进行安装时不授予管理员权限。为TMP变量提供了无效或不同的路径。损坏的系

什么是Java中的实例变量 什么是Java中的实例变量 Feb 19, 2024 pm 07:55 PM

Java中的实例变量是指定义在类中,而不是方法或构造函数中的变量。实例变量也称为成员变量,每个类的实例都有自己的一份实例变量副本。实例变量在创建对象的过程中被初始化,以及在对象的生命周期中保存并保持其状态。实例变量的定义通常放在类的顶部,可以用任何访问修饰符来声明,可以是public、private、protected或默认访问修饰符。这取决于我们希望这个变

Python 语法的思维导图:深入理解代码结构 Python 语法的思维导图:深入理解代码结构 Feb 21, 2024 am 09:00 AM

python凭借其简单易读的语法,广泛应用于广泛的领域中。掌握Python语法的基础结构至关重要,既可以提高编程效率,又能深入理解代码的运作方式。为此,本文提供了一个全面的思维导图,详细阐述了Python语法的各个方面。变量和数据类型变量是Python中用于存储数据的容器。思维导图展示了常见的Python数据类型,包括整数、浮点数、字符串、布尔值和列表。每个数据类型都有其自身的特性和操作方法。运算符运算符用于对数据类型执行各种操作。思维导图涵盖了Python中的不同运算符类型,例如算术运算符、比

如何使用Ajax从PHP方法中获取变量? 如何使用Ajax从PHP方法中获取变量? Mar 09, 2024 pm 05:36 PM

使用Ajax从PHP方法中获取变量是Web开发中常见的场景,通过Ajax可以实现页面无需刷新即可动态获取数据。在本文中,将介绍如何使用Ajax从PHP方法中获取变量,并提供具体的代码示例。首先,我们需要编写一个PHP文件来处理Ajax请求,并返回所需的变量。下面是一个简单的PHP文件getData.php的示例代码:

PHP函数介绍—is_string(): 检查变量是否为字符串 PHP函数介绍—is_string(): 检查变量是否为字符串 Jul 24, 2023 pm 09:33 PM

PHP函数介绍—strpos():检查变量是否为字符串在PHP中,is_string()是一个非常有用的函数,它用于检查变量是否为字符串。当我们需要确定一个变量是否为字符串时,is_string()函数可以帮助我们轻松实现这个目标。下面我们将学习关于is_string()函数的使用方式以及提供一些相关代码示例。is_string()函数的语法非常简单。它只需

jQuery使用实践:判断变量是否为空的几种方式 jQuery使用实践:判断变量是否为空的几种方式 Feb 27, 2024 pm 04:12 PM

jQuery是一个广泛应用于Web开发中的JavaScript库,它提供了许多简洁方便的方法来操作网页元素和处理事件。在实际开发中,经常会遇到需要判断变量是否为空的情况。本文将介绍使用jQuery判断变量是否为空的几种常用方法,并附上具体的代码示例。方法一:使用if语句判断varstr="";if(str){co

See all articles