前端零碎知识点补充--1

background 属性总结

在一个div元素中设置多个背景图像(并指定他们的位置)。

背景缩写属性可以在一个声明中设置所有的背景属性。

可以设置的属性分别是:background-color, background-position, background-size, background-repeat, background-origin, background-clip, background-attachment,和background-image.

语法:


background: bg-color bg-image  position/bg-size bg-repeat bg-origin bg-clip bg-attachment  initial|inherit;

如果上述值缺少一个,这不要紧,例如background:#FF0000 URL(smiley.gif);是允许的。

background-color --背景颜色
background-position --left top /center
size – width height /% cover content
background-repeat, --是否平铺
background-origin ----box类型 --定位区域
background-clip — box类型 --绘画区域
background-attachment ----背景图片是否随页面滚动
background-image —图片

立即执行函数的作用

两种写法:

(function () {alert ('我是匿名函数')})();
(function(){}());

  • 立即执行函数的作用:
  1. 不必为函数命名,避免了污染全局变量
  2. 立即执行函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量
  3. 封装变量
<body>
    <ul id="list">
        <li>公司简介</li>
        <li>联系我们</li>
        <li>营销网络</li>
    </ul>
    <script>
       var list = document.getElementById("list");
      var li = list.children;
      for(var i = 0 ;i<li.length;i++){
        li[i].onclick=function(){
          alert(i);  // 结果总是3.而不是0,1,2
        }
      }
     </script>  
</body>

为什么alert总是3? 因为i是贯穿整个作用域的,而不是给每一个li分配一个i,点击事件使异步,用户一定是在for运行完了以后,才点击,此时i已经变成3了。
那么怎么解决这个问题呢?

m1:

可以用立即执行函数,给每个li创建一个独立的作用域,在立即执行函数执行的时候,i的值从0到2,对应三个立即执行函数,这3个立即执行函数里边的j分别是0,1,2所以就能正常输出了

m2:
ES6的块级作用域解决整个问题

<body>
    <ul id="list">
        <li>公司简介</li>
        <li>联系我们</li>
        <li>营销网络</li>
    </ul>
    <script>
       var list = document.getElementById("list");
      var li = list.children;
      for(let i = 0 ;i<li.length;i++){
        li[i].onclick=function(){
          alert(i);  // 结果是0,1,2
        }
      }
     </script>  
</body>

五、立即执行函数使用的场景

1、你的代码在页面加载完成之后,不得不执行一些设置工作,比如时间处理器,创建对象等等。

2、所有的这些工作只需要执行一次,比如只需要显示一个时间。

3、但是这些代码也需要一些临时的变量,但是初始化过程结束之后,就再也不会被用到,如果将这些变量作为全局变量,不是一个好的注意,我们可以用立即执行函数——去将我们所有的代码包裹在它的局部作用域中,不会让任何变量泄露成全局变量,看如下代码:

链接:https://www.jianshu.com/p/b10b6e93ddec

JS对象中,a.b与a[b]的异同?

同:

都是获得该对象的某个属性

异:

不同之处在于a[b]中的b必须是个字符串

b可以取值的类型为:

  1. string a.b a[‘b’]

  2. number a[‘0’]

  3. null a.b a[‘b’]

  4. undefined a.b a[‘b’]

var a = {};
console.log(a);

a = {0: "ha", true: 12, null: 2, undefined: 23, name: "wahaha"}

js获取对象属性的例题

  // example 1
        let a = {},
            b = '0',
            c = 0;
        a[b] = '小明';
        a[c] = '小红';
        console.log(a[b]); 

        //正确答案:小红
        /* b.toString()  -->'0'
           c.toString()   -->'0' (覆盖) ---获取键名
           键名为c
        */

  // example 2
        let a = {},
            b = Symbol('1'),
            c = Symbol('1');
        a[b] = '小明';
        a[c] = "小红";
        console.log(a[b]); 
        // 正确答案:小明
        /*
        ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。
        它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
        b.toString() --->Symbol('1')
        c.toString() --->Symbol('1') (独立的)
        故a[b] --键名为b
        */

  //example 3
        let a = {},
            b = {
                n: '1'
            },
            c = {
                m: '2'
            };
        a[b] = '小明';
        a[c] = "小红";
        console.log(a[b]); 
        // 正确答案:小红
    /*    
    获取对象属性的方法:a.b 与 a[b]

    不同点:a[b] -->b必须是字符串形式
    
    转换为字符串的方法toString()
        
    因为键名称只能是字符串,b/c单做键会调用toString()得到的都是[object Object],a[b],a[c]都等价于a["[object Object]"],
    那不就是更新[object Object]这个键的值了。--键名为c
    故a[b] = a[c] = "小红"
     */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值