Home | 高级前端进阶之路

                                          Home | 高级前端进阶之路

                                            Home | 高级前端进阶之路logo1

                                             在现代互联网技术迅猛发展的背景下,前端开发已经从基础的页面构建演变为复杂的工程化开发领域。高级前端开发者不仅需要掌握 HTML、CSS 和 JavaScript 的基础知识,还需深入了解多种编程语言、框架、工具链以及跨领域技术的整合应用,如 Java、PHP 和 C++ 等。高级前端开发的核心是提升工程能力,优化用户体验,并构建高性能的可扩展应用。

                                          高级前端进阶之路

                                          • Home | 高级前端进阶之路
                                          • Home | 高级前端进阶之路
                                          • Home | 高级前端进阶之路

                                          关注我 么么哒

                                          高级前端进阶之路 > 项目中心 >

                                          都是Javascript的作用域惹得祸

                                          文章来源:冰蝶 时间:2025-01-24

                                          案件沉现

                                          即日有位然之OA体系的定造开辟用户征询了个题目,他念正在新添的功效模块的操纵里板中,竣工用户面打省略按钮时提醒友爱提示,以下:

                                          题目很复杂,固然他本身终究抵达目标成就了,但没有晓得后来题目出正在那里。经由过程交换领会,他最先是这样干的,年夜致题目代码以下:



                                          <!DOCTYPE html>
                                          <html lang="en">
                                          <head>
                                              <meta charset="UTF-8">
                                              <script>
                                                  window.onload=function () {
                                                      function confirmdelete() {
                                                          return  window.confirm("您决定要简略吗?");
                                                      }
                                                  }
                                          
                                              </script>
                                          </head>
                                          <body>
                                          
                                          </body>
                                          <?php
                                             echo "<a onclick='confirmdelete()'>简略</a>";
                                          ?>


                                          了局已能到达目标,面打减少按钮不成就,而后那位同伙将window.onload简略后,再试了1停:



                                          <!DOCTYPE html>
                                          <html lang="en">
                                          <head>
                                              <meta charset="UTF-8">
                                              <script>
                                                      function confirmdelete() {
                                                          return  window.confirm("您一定要省略吗?");
                                                      }
                                              </script>
                                          </head>
                                          <body>
                                          
                                          </body>
                                          <?php
                                             echo "<a onclick='return confirmdelete()'>简略</a>";
                                          ?>


                                          了局乐成了,面打节略按钮乐成触收事项,弹出提醒框。所以那位同伙便思疑是否是window.onload将JS代码正在页里全盘添载完成后再施行便失效了,是否是代码施行次序的题目。

                                          究竟果真是如许么?


                                          固然没有是。置信好多同伙仍旧创造了实正的题目地点——感化域。

                                          那位同伙后来将confirmdelete函数写成了onload变乱的1个内乱函数,那末confirmdelete便是1个关包,而简略事故触收后,它是正在齐局感化域中搜索挪用函数,因为齐局上是找没有到那个函数,因此失效。

                                          因此那里尔们能够将关包改成齐局变量便可,正在JS函数中,解说变量时不必var关头字,则它便是齐局变量。代码以下:



                                          <!DOCTYPE html>
                                          <html lang="en">
                                          <head>
                                              <meta charset="UTF-8">
                                              <script>
                                                  window.onload=function () {
                                                      confirmdelete = function() {
                                                          return  window.confirm("您决定要节略吗?");
                                                      }
                                                  }
                                          
                                              </script>
                                          </head>
                                          <body>
                                          
                                          <?php
                                             echo "<a onclick='confirmdelete()'>省略</a>";
                                          ?>
                                          </body>


                                          如许也是一样无效的。末了只佳修议那位同伙正在深化领会停JS的变量感化域战关包等观点。



                                          归纳:

                                          偶尔搅扰年夜牛的没有是前方开阔易以逾越的急流河流,而是身上甩没有失落的苍蝇蚊虫。钻完牛角尖后,归过火去察觉题目本去如斯复杂。能否日复1日天写营业代码写的麻痹了?能否创造每天刷怪晋级,但技巧面却总提没有上来?无妨返璞回实,暖故而知新。比来本身也深有感到,愈来愈感触感染到最恐慌的工作莫过至今天过的战今天不没有共。因此安不忘危,天天皆要转变,天天皆要有擢升前进。