js基础——变量、作用域、内存
1、new关键字创建的是引用类型;
eg. var box = new Object();
box.name = "Linda";//引用类型添加属性没问题
alert(box.name);
2、基本类型添加属性会输出undefined
eg. var box = "Linda";
box.height = 185;
alert(box.height);//undefined
3、复制变量值:基本类型复制值本身,引用类型复制地址。
eg. 基本类型复制变量(即两个变量操作互不影响)
var str1 = "Lee";
var str2 = str1;
str1 = "hello";
console.log(str1);//hello
console.log(str2);//lee
eg. 引用类型复制变量(box和box2都是指向同一个变量,若是name属性改了,则box.name 和 box2.name的值都会相应改变)
var str3 = new Object();
str3.name = "Bob";
var str4 = str3;
console.log(str3.name);//Bob
console.log(str4.name);//Bob
4、传递参数:参数不会按引用传递(局部变量),直接按值传递,即使变量有基本类型和引用类型之分。
eg.基本类型传递参数
function fn(num) { //num是局部变量
num += 10;
return num;
}
var num = 50;
var result = fn(num);
console.log(result);//60
console.log(num);//50 与上面的局部变量无关
eg.引用类型传递参数
function fun(obj) {
obj.address = "四川";
}
var p = new Object();
fun(p);
console.log(p.address);//四川
5、检测类型:
1)typeof(一般用于检测数据类型)
eg. var ty = true;
console.log(typeof ty);//boolean
2)instanceof(检测是什么类型的对象:数组、字符串(特殊)等)
eg. var ty1 = [1, 25, 59, 265];
console.log(ty1 instanceof Array);//检测是否是数组 true
var ty2 = {};
console.log(ty2 instanceof Object);//检测是否是对象 true
var ty3 = /g/;
console.log(ty3 instanceof RegExp);//检测是否是正则 true
var ty4 = new String("Linda");
var str = "hello";
console.log(typeof str);//string
console.log(str instanceof);//false
var str2 = new String("hello");
console.log(str2 instanceof String);//true
6、执行环境和作用域
执行环境定义了函数或变量有权访问的其他数据,并决定了各自的行为。
全局执行环境就是最外围的指向环境,即window对象
var box1 = "blue";
function setBox(){
console.log(box1);//访问全局变量
}
setBox();//执行函数
var boxn="hello";
function getBox(){
console.log(window.boxn);//全局变量即window的属性
}
window.getBox();//全局函数即window的方法
eg.通过传参替换函数体内的局部变量,但是作用域仅限于函数体内的局部环境
var boxn="hello";
function getBox(boxn){//通过传参替换了全局变量
console.log(boxn);//WORLD
}
getBox("WORLD");
console.log(boxn);//hello
eg.每个函数调用时都会创建自己的执行环境,执行后把控制权交给上一级的执行环境
var color="yellow";
function setColor(){
function getColor() { //getColor的执行环境在getColor内
var color1 = "green";
console.log(color);//yellow
console.log(color1);//green
}
getColor();
}
setColor();
7、没有局部作用域:if语句、for语句
eg.var关键字在函数体内的意义
function number(number1,number2) {
var sum = number1 + number2; //此时sum是局部变量,去掉var就是全局,报错
return sum;
}
console.log(number(15,20));
console.log(sum);//报错 sum is undefined
8、内存问题
javaScript会自行管理内存分配及无用内存的回收
一般来说确保占用最少的内存可让页面获得更好的性能,那么优化内存的最佳方案就是一旦数据不再有用,就将其设置为null来释放引用即解除应用.
eg.var p = {
name:"hello"
}
p = null;
本文来自博客园,作者:小虾米吖~,转载请注明原文链接:https://www.cnblogs.com/LindaBlog/p/10984192.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」