java中局部变量有默认值吗(js 全局变量在function中不能用)

JavaScript 首先会去查找变量是否存在当前作用域,如果不存在,会在父级、爷级、祖级的作用域中去逐步查找。
数据存储位置会对性能产生影响,数据存储有 4 种方式:字面量、变量、数组项、对象成员。
字面量和局部变量的访问速度最快,数组项和对象成员相对来说会慢一些。
局部变量会提升到「当前作用域」的最顶端,也就是「作用域链」的起始位置,所以访问局部变量比访问深层次作用域变量更快。变量在作用域中的位置越深,访问它所需要的时间就越长。
为什么要尽量减少「全局变量」?
因为全局变量在作用域链的最末端,所以访问它的速度也是最慢的。
console.log(window.location.href + window.location.host)//全局对象存储为局部对象减少全局查找let _location = window.location;console.log(_location.href + _location.host);
在对象中,属性和方法在原型链中的位置越深,访问它的速度也就越慢。
要尽量的把对象成员、数组元素、深层作用域变量,赋值保存在局部变量中,这样可以改善 JavaScript 的性能。
let book = {    title:\\\'this is title\\\',    desction:\\\'this is desction.\\\'}console.log(book.toString());//[object object]
对象 book 中有两个实例成员:title 和desction ,对象中并没有定义 toString() 方法,但这个方法会被顺利执行,是因为 toString() 方法是由对象 book 继承而来的原型成员。
对象 book 是可以访问它原型中的属性和方法。
当 book.toString() 调用的时候,会从对象实例开始查找,搜索 toString ,没有找到,会继续顺着它的原型对象向上搜索,直到找到并执行。
    function hasClassFn(element,className1,className2){    return element.className === className1 || element.className === className2;}//上面的代码中 element.className 被读取了两次。//下面的代码将查找次数减少到了 1 次function hasClassFn(element,className1,className2){    let currentClassName = element.className;    return currentClassName === className1 || currentClassName === className2;}
    通常,在函数中如果要多次读取同一个对象属性,最佳做法是将属性值保存到局部变量中。

    原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34506.html

    (0)
    小道研究's avatar小道研究
    上一篇 2024年4月8日 上午10:44
    下一篇 2024年4月8日 上午10:46

    相关推荐

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注