javascript之变量作用域内存问题

Dear 丶 2022-09-25 10:16 276阅读 0赞
  1. 访问变量有按值和按引用两种方式,而函数的参数只能按值传递。把参数当成局部变量就行了。
  2. var a = 10
  3. function add(num){
  4. num += 10;
  5. return num;
  6. }
  7. var r = add(a);
  8. a=10,r=20//参数按值传递,所以不会改变a的值
  9. var a = new Object();
  10. function change(obj){
  11. obj.name="hello";
  12. obj=new Object();
  13. obj.name="world";
  14. }
  15. a.name="hello"//因为参数按值传递所以函数只会改变a的值,不会改变引用。
  16. obj=new Object()这里就是创建函数的局部对象了,函数结束就没了,不会改变a的引用。
  17. 基本数据类型的赋值就是新生成一个新的变量然后赋值
  18. var a = 5;
  19. var b = a;//这里a和b都是5,但是两个是独立的。这是按值传递
  20. 对象的赋值就是引用的同一个对象,对象改变所有的引用就会改变。
  21. var a = new Object();
  22. var b = a;//这里a和b就是引用的同一个对象,这是按引用传递
  23. instanceof表示xx是不是xxx对象的实例,ArrayfunctionObject的子类。是的话返回true,不是返回false
  24. var a = new Object();
  25. var b = new String();
  26. a instanceof Object//true
  27. b instanceof String//true
  28. 局部可以访问全局的变量,全局不能访问局部的变量。局部访问变量先从自己内部开始查找,找不到就到上一级一找。
  29. if没有作用域,for有作用域,就是在\{\}中定义的变量是在最接近的环境中,而for(var i=0)i是在for中,for结束i就没了。var声明的变量是在最接近的环境中,如在function那就在这个function作用域内,如果不用var声明,就是全局变量。
  30. 垃圾收集器有标记清除和引用计数两种,标记清除就是对变量进行标记,然后清除,常用的。引用计数是记录引用的次数来清除变量,不常用,存在循环引用时会出现问题,如a引用bb引用a。可以自己解除引用,就是把不用的全局变量设置为null。这样垃圾收集器就可以回收,解除引用可以消除循环引用现象,对垃圾收集器有好处,所以应该及时的对全局对象,全局对象属性,循环引用变量解除引用。垃圾收集器有一个周期,但是可以调用方法来立即执行。基础类型保存在栈中,对象保存在堆中。
  31. 确定哪种基本类型用typeof,确定哪种引用类型用instanceof

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JavaScript-JS变量作用

    变量是有作用域的,也叫可见范围,在函数内部创建的变量只能在函数内部使用,外面是无法访问到的;但是在函数外部创建的变量,却可以渗透到函数内部,也就是说函数中可以访问外部的全局变

    相关 javaScript变量作用

    作用域是程序源代码中定义变量的区域。 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript采用词法作用域(lexical scopin

    相关 javascript变量作用

    基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型还是

    相关 变量作用内存问题

    变量作用域和内存问题 1.基本类型和引用类型的值 基本类型就是简单的数据段(5种值类型),而引用类型就是对象(操控对象的引用)。 1.1复制变量值 引用类型实际上在复制...