如何在全局设置 javascript 函数?

How can I set javascript function in global?

我想在全局 js 中设置我的函数。所以它可以从任何地方调用

我有这个功能:

$(function () {
    function formatCurrency(input) {
        return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ".");
    }
});

我把函数放在

C:\xampp\htdocs\mysystem\resources\assets\js\main.js

然后我在

上添加:<script src="{{URL::asset('/resources/assets/js/main.js')}}"></script>

C:\xampp\htdocs\mysystem\resources\views\layouts\app.blade

执行时,控制台出现如下错误:

GET http://mysystem.dev/resources/assets/js/main.js 404 (Not Found)

我该如何解决?

你可以像这样定义全局函数

window.formatCurrency = function(input){
            return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ".");
        }

并且您在 ready function($(function)) 中定义函数,那么您也必须在 ready 函数中调用它。所以最好在就绪函数之外或在自调用函数中定义它。

您应该将函数定义为 window 对象的方法。

window.formatCurrency = function(input) {
    return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ".");
}

另一种更干净的方法是将函数定义为名为Utils的对象的方法,如下所示:

var Utils = (function(){
    function formatCurrency(input){
        return input.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, ".");
    }
    return {
        formatCurrency: formatCurrency
    }
}());

这样做不会污染全局命名空间。您将在名为 Util 的全局命名空间中只定义一个变量,该变量将包含一个具有有用功能的对象,可以被您的应用程序的其他部分使用。事实上,您看不到后一种方法的好处。但是,您可以考虑如果您想使用另外 3 个函数,它们自己使用另外 2 个函数作为助手,那会怎样。如果是这种情况,您的 return 语句还将包含另外 3 个函数,而我之前提到的 2 个函数根本不会被删除!

问题似乎是您使用 asset() 错误。

资产指的是 /public 中的一个文件。

您应该 compile/minimize 用于生产的 JS 并将其放在 /public 中的某处,即 /public/js/my.js