谈谈原生 JS

作者: 技术与健康 | 来源:发表于2018-04-14 18:12 被阅读31次

    现在的前端开发,大部分人一上手,就是去用 jquery,zepto,更有就是vue. 而react或者 NG对初学者来说,还是有些门槛。

    既然这些库这么好用,还有必要去学习原生JS吗?

    原生 JS可以认为是砖块,要构建一个成功的项目或者产品,要求开发人员对数据结构,模块划分,函数划分,异步调用等知识能够真正的从系统设计,软件工程的角度去思考。可是行业发展太快,供不应求,所以一些框架及时出现,降低了开发的门槛。满足了业务需要。

    那是不是满足业务需要就够了呢? 其实主要还是看你自己,如果你要做业务专家,那可以主要精力聚焦业务模型,把实现交给他人。

    而如果你要做技术专家,那么原生JS还是要精进的,毕竟通过原生JS,你对于DOM,原型, 闭包,立即执行函数,高阶函数,异步通信机制,才能有更加深刻学些和掌握。

    通过原生JS,可以让你真正掌握JS这门语言。

    (function(global) {
        // body...
        
    
       function hello() {
        // body...
        console.log("hello");
        alert("hello");
       }
    
       var data= [
              {id:1,name:"one",price:100},
               {id:1,name:"one",price:100},
                {id:1,name:"one",price:100},
                 {id:1,name:"one",price:100},
                  {id:1,name:"one",price:100},
                   {id:1,name:"one",price:100},
                    {id:1,name:"one",price:100}
          ];
    
    
          function initPage() {
            // body...
            var ul = createElement("ul");
            ul.className = "list";
             var fragment = document.createDocumentFragment();
            for(var i=0;i<data.length;i++){
              var li = createElement("li");
              li.className = "item";
              var nameEl = createElement("span");
              nameEl.className = "col";
              nameEl.textContent =  data[i].name;
              li.appendChild(nameEl);
    
              var priceEl = createElement("span");
               priceEl.className = "col";
              priceEl.textContent =  data[i].price;
              li.appendChild(priceEl);
    
              console.log(nameEl.compareDocumentPosition(document.getElementById("xx")));
               console.log(nameEl.isSameNode(priceEl));
               console.log(nameEl.isContentEditable);
              li.setAttribute("data-value",data[i].price)
              // console.log(li.getUserData("data-value"));
              fragment.append(li);
            }
            ul.appendChild(fragment);
            var attrul = document.createAttribute("id");
            attrul.value ="10";
            ul.setAttributeNode(attrul);
            document.getElementById("xx").appendChild(ul);  
    
          }
          
           
         
          function createElement(type) {
             return document.createElement(type);
    
          }
    
         global.hello = hello;
         global.initPage = initPage;
    
    
         global.initModule = {
            hello:hello,
            initPage:initPage
         }
    
    })(window)
    
    image.png

    基于原生JS的模块,快速操作DOM的fragment,动态创建DOM元素和属性的方式。

    下面这篇文章对一些基础概念做了比较好的讲解
    https://blog.csdn.net/liujie19901217/article/details/52088182

    1.变量,值类型,引用类型

    • 栈内存中存放的是基本数据类型值,堆内存中存放的是引用类型值,引用类型值在内存中的地址存放在栈中,也就是我们常说的对象对象引用(指针)。

    • 在变量复制方面,基本类型和引用类型也有所不同,基本类型复制的是值本身,而引用类型复制的是内存地址。
      2,this
      3,执行环境及作用域
      4,内存泄漏常见情况

    • 闭包,循环引用,计时器清除

    相关文章

      网友评论

        本文标题:谈谈原生 JS

        本文链接:https://www.haomeiwen.com/subject/tqhlkftx.html