js变量作用域内存

基本数据类型:
undefined;null;boolean;number;string
这五种基本类型是按值访问的,因为可以操作保存在变量中的实际的值

引用数据类型:
object
引用数据类型是保存在内存中的对象,javascript不允许直接访问内存中的位置,也就是不能直接操作对象的内存空间,在操作对象时,实际操作的是对象的引用,而不是实际的对象(这种说法其实是不严谨的,当复制保存着对象的某个变量时,操作的是对象的引用。但是为对象添加属性时,操作的是实际的对象)

参数传递:
javascript中所有的函数都是按值传递的,所以当函数的形式参数(用ECMAscript的概念,就是arguments对象中的一个元素)是引用数据型时,它也是按值传递的:其方式复制一份该对象的地址给形参,记住不是引用

eg:

function addTen(num){
num+=10;
return num;
}

var count=20;
var result=addTen(count);
alert(count);	//20 值没有变化	其实就是当count把值复制给形参num时,就与count无关了
alert(result);	//30

  

另一个例子:
eg:

function setNamea(obj){
obj.name:"monica";
}

var person={};
setNamea(person);
alert(person.name);	//"monica" 它们只是用了同一个地址,虽然它是按值传递的但效果和引用传递时一样的,所以常被错误的认为是引用传递

  

看看这个例子:
eg:

function setNameb(obj){
obj.name="monica";
obj = new Object();
obj.name="Green";
}

var person={};
setnameb(person);
alert(person.name);	//monica(闭包)

  

检测类型:typeof和instanceof

var a=undefined;    alert(typeof a);	//undefined
var b=null;	    alert(typeof b);	//object
var c=true;	    alert(typeof c);	//boolean
var d=1;	    alert(typeof d);	//number
var e="monica";	    alert(typeof e);	//string
var f=new Object();  alert(typeof f);	//object

  

instanceof返回的是true或则false

var person{};
alert(person instanceof Object);	//instanceof is a object?   true

alert(person instanceof Array);	    //instanceof is a Array?  	false

alert(person instanceof RegExp);    //instanceof is a RegExp?  	false

  

时间: 2024-10-14 22:03:55

js变量作用域内存的相关文章

js变量作用域

? 1 2 3 4 5 6 7 8 9 10 for(var i =0;i<100;i++)   {        } alert(i);//100 if(true){     var i="91d";   } alert(i);//91d ? 1 2 3 4 5 6 function add(ad1,ad2){   sum=ad1+ad2;   return sum;//如果没有用var声明局部变量,会提升为全局的变量 } alert(add(3,5)); alert(&quo

[刘阳Java]_步步窥探JS变量作用域

今天的这个文章题目名称甚是让人会突发异想.JS变量作用域是务必需要搞懂的,单从面试过程就会让面试者烧脑壳.所以,我们还是写一篇关于JS变量作用域的技术专题,让所有小伙伴能够借此文章去整理JS的基础学习.说不定很多人会比我理解这方面基础知识有更好地见解 黄金守则第一条: JS没有块级作用域(你可以自己闭包或其他方法实现),只有函数级作用域,函数外面的变量函数里面可以找到,函数里面的变量外面找不到 <!doctype html> <html lang="en"> &

javaScript的闭包 js变量作用域

js的闭包 js的变量作用域: var a=90; //定义一个全局变量 function test(){ a=123; //使用外层的 a变量 } test(); document.write("a="+a); var a=90; //定义一个全局变量 function test(){ var a=123; //定义一个局部变量 } test(); document.write("a="+a); a=90; //没有var ,就会试着去找(父函数 的 a),如果找

原型模式故事链(5)--JS变量作用域、作用域链、闭包

上一章 JS执行上下文.变量提升.函数声明 传送门:https://segmentfault.com/a/11... 本次我们主要讲讲变量作用域和闭包变量作用域:顾名思义:变量起作用的范围.变量分为全局变量和局部变量.全局变量:在任何地方都能用,在所有函数之外.局部变量:只能在定义它的函数中,以及它的子函数中使用. 当前作用域没有定义的变量,称为自由变量. 举例子: <!DOCTYPE html> <html> <head> <title>dsfg</

js变量作用域--变量提升

1.JS作用域 在ES5中,js只有两种形式的作用域:全局作用域和函数作用域,在ES6中,新增了一个块级作用域(最近的大括号涵盖的范围),但是仅限于let方式申明的变量. 2.变量声明 1 var x; //变量声明 2 var x=1; //变量声明并赋值 3 x = 1; // 定义全局变量并赋值 3.函数声明 function fn(){}; //函数声明并定义 var fn = function(){}; // 实际上是定义了一个局部变量fn和一个匿名函数,然后把这个匿名函数赋值给了fn

JS 变量作用域

变量作用域 有作用范围和生命周期. 静态作用域: 词法作用呀,由程序的定义位置决定,在编译的时候就决定了生存周期和作用范围. 跟代码执行顺序无关,通过代码嵌套来解析. 例子: var x = 10; function fun () { //编译的时候,X已经初始化了. alert(x); } function foo () { var x = 20; fun(); //运行fun的时候,x已经编译过了,就是10 } foo(); //10 动态作用: 程序运行时决定的.类似于C++的动态绑定.

js 变量作用域 与 this

首先说下js作用域链:由于js变量都是对象的属性,对象又可以是对象的属性,最终到达window,所以变量-------window就是一条作用域链: 先说下变量作用域: var a=10;function test(){ console.log(a);----------undefined var a = 5; console.log(a);----------5}test(); test() 方法内:console.log(a)中变量a寻找自己的定义,发现var a = 5;已经有定义了,所以

JS变量、内存、作用域小结

确保占用最少的内存可以让页面获得更好的性能,优化内存占用的最佳方式:为执行中的代码 只保存必要的数据.一旦数据不再有用,最好通过将其值置为null来释放其引用.适用于大多 数全局变量和全局对象的属性.局部变量会在他们离开执行环境时自动被解除引用. Example: fuction createPerson(name){ var person = new Object(); person.name = name; return person; } Var globalPerson = creatP

js变量作用域和闭包的示例

<script> /* js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量 闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什么时候会用这个闭包,然后这个资源会一直占据内存,造成内存泄漏 */ /*1 --函数内部可以访问外部的变量*/ /*var i = 10; function test() { console.log(i); } test();*/ /*2 在函数外部,我们就不能访问函数内部的变量,不然会报变量没有被定义*/