热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【转】浅说js变量

原文链接:www.jimzhan.com*1,变量类型:JavaScript是弱类型,变量可存储任意类型,并且运行期间类型可变;-变量可进行类型转换

原文链接:www.jimzhan.com

/*
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); // undefinedvar test = 'test';console.log(test); // 'test'
}
// 转化为
function f() {var test;console.log(test); // 变量仅声明, 则初始化为 undefinedtest = '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);*/


转载于:https://www.cnblogs.com/simayixin/archive/2011/05/07/2036580.html


推荐阅读
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
author-avatar
mobiledu2502875393
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有